精华内容
下载资源
问答
  • 年龄的字段类型是什么
    千次阅读
    2019-08-06 21:10:09

    1、字段类型
    Integer int整型,普通整数,一般是32位
    SmallInteger int 取值范围最小的整型,一般是16位
    Big Integer int或long 不限制精度的整数
    Float float浮点型
    String str 不定长字符串类型

    Text str文本 变长字符串,对较大或不限长度的字符串做了优化
    Unicode unicode变长unicode字符串
    #unicode采用双字节对字节进行编码
    unicode Text unicode 变长Unicode字符串,对较长或不限长度的字符串做了优化
    Boolean bool布尔值
    Date datatime.date日期
    Time datetime.time时间类型时分秒
    DateTime datetime.datetme时间类型,年月日时分秒
    Interval datetime.timedelta时间间隔
    Enum str一组字符串
    PickleType 任何Python对象自动使用Pickle序列化
    LargeBinary str二进制文件

    2、字段常用的参数
    primary_key 主键
    Unique不重复,唯一
    Index 索引
    Nullable如果为True是可以为空
    Default默认值
    Autoincrement自增长

    更多相关内容
  • MySQL字段类型最全解析

    千次阅读 2021-03-15 17:38:53
    前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇文章我们将把字段类型一网打尽,讲一讲常用字段类型的用法。常用的字段类型大致可以分为**数值类型**、**字符串类型**、**日期时间...

    **前言:**

    要了解一个数据库,我们必须了解其支持的数据类型。MySQL 支持大量的字段类型,其中常用的也有很多。前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇文章我们将把字段类型一网打尽,讲一讲常用字段类型的用法。

    常用的字段类型大致可以分为**数值类型**、**字符串类型**、**日期时间类型**三大类,下面我们按照分类依次来介绍下。

    #### 1.数值类型

    数值类型大类又可以分为**整型**、**浮点型**、**定点型**三小类。

    整型主要用于存储整数值,主要有以下几个字段类型:

    ![image.png](https://img-blog.csdnimg.cn/img_convert/6793f379547c326d8b4d7301c71582c4.png)

    整型经常被用到,比如 tinyint、int、bigint 。默认是有符号的,若只需存储无符号值,可增加 unsigned 属性。

    int(M)中的 M 代表最大显示宽度,并不是说 int(1) 就不能存储数值10了,不管设定了显示宽度是多少个字符,int 都是占用4个字节,即int(5)和int(10)可存储的范围一样。

    存储字节越小,占用空间越小。所以本着最小化存储的原则,我们要尽量选择合适的整型,例如:存储一些状态值或人的年龄可以用 tinyint ;主键列,无负数,建议使用 int unsigned 或者 bigint unsigned,预估字段数字取值会超过 42 亿,使用 bigint 类型。

    浮点型主要有 float,double 两个,浮点型在数据库中存放的是近似值,例如float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位,整数部分最大是3位。 float 和 double 平时用的不太多。

    ![image.png](https://img-blog.csdnimg.cn/img_convert/48b772e9e68ebf46de1c862f800df613.png)

    定点型字段类型有 DECIMAL 一个,主要用于存储有精度要求的小数。

    ![image.png](https://img-blog.csdnimg.cn/img_convert/402c20a3a6d9554de16c6a237686bc50.png)

    DECIMAL 从 MySQL 5.1 引入,列的声明语法是 DECIMAL(M,D) 。 NUMERIC 与 DECIMAL 同义,如果字段类型定义为 NUMERIC ,则将自动转成 DECIMAL 。

    对于声明语法 DECIMAL(M,D) ,自变量的值范围如下:

    - M是最大位数(精度),范围是1到65。可不指定,默认值是10。

    - D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。

    例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中的值的范围是从-999.99到999.99。

    #### 2.字符串类型

    字符串类型也经常用到,常用的几个类型如下表:

    ![image.png](https://img-blog.csdnimg.cn/img_convert/2ebb410a54b8ee4a901c008a9d9aa457.png)

    其中 char 和 varchar 是最常用到的。char 类型是定长的,MySQL 总是根据定义的字符串长度分配足够的空间。当保存 char 值时,在它们的右边填充空格以达到指定的长度,当检索到 char 值时,尾部的空格被删除掉。varchar 类型用于存储可变长字符串,存储时,如果字符没有达到定义的位数,也不会在后面补空格。

    char(M) 与 varchar(M) 中的的 M 表示保存的最大字符数,单个字母、数字、中文等都是占用一个字符。char 适合存储很短的字符串,或者所有值都接近同一个长度。例如,char 非常适合存储密码的 MD5 值,因为这是一个定长的值。对于字符串很长或者所要存储的字符串长短不一的情况,varchar 更加合适。

    我们在定义字段最大长度时应该按需分配,提前做好预估,能使用 varchar 类型就尽量不使用 text 类型。除非有存储长文本数据需求时,再考虑使用 text 类型。

    BLOB 类型主要用于存储二进制大对象,例如可以存储图片,音视频等文件。日常很少用到,有存储二进制字符串时可以考虑使用。

    #### 3.日期时间类型

    MySQL支持的日期和时间类型有 **YEAR** 、**TIME** 、**DATE** 、**DATETIME** 、**TIMESTAMP**,几种类型比较如下:

    ![image.png](https://img-blog.csdnimg.cn/img_convert/aeb545fe3c3aeb30ce486f764a51da37.png)

    涉及到日期和时间字段类型选择时,根据存储需求选择合适的类型即可。

    关于 DATETIME 与 TIMESTAMP 两种类型如何选用,可以按照存储需求来,比如要求存储范围更广,则推荐使用 DATETIME ,如果只是存储当前时间戳,则可以使用 TIMESTAMP 类型。不过值得注意的是,TIMESTAMP 字段数据会随着系统时区而改变但 DATETIME 字段数据不会。总体来说 DATETIME 使用范围更广。

    **总结:**

    本篇文章主要介绍了 MySQL 中常用的字段类型,平时用到的字段类型基本都在这里了,以一张思维导图总结如下:

    ![image.png](https://img-blog.csdnimg.cn/img_convert/52e8beda303a2b8dc3e0f41915039151.png#)

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31401187/viewspace-2754976/,如需转载,请注明出处,否则将追究法律责任。

    展开全文
  • 最全 SQL 字段类型(4种)、属性(6种)总结

    万次阅读 多人点赞 2021-07-28 00:41:57
    文章目录字段类型1、字段类型作用2、整数类型3、显示宽度4、小数类型(浮点型)5、小数类型(定点型)6、字符串类型(定长型)7、字符串类型(变长型)8、字符串类型(文本字符串)9、字符串类型(枚举)10、字符串...

    字段类型

    字段类型:MySQL中用来规定实际存储的数据格式

    • 字段类型在定义表结构时设定
    • 设定好字段类型后,插入数据时必须与字段类型对应,否则数据错误
    • 字段类型的作用就是强制规范录入的数据格式
      • 规范数据的格式
      • 保证数据的有效性
    • MySQL有四大数据类型
      • 整数类型:只能存储整数
      • 小数类型:可以存储有效数值
      • 字符串类型:存储字符串数据
      • 时间日期类型:存储时间日期格式数据

    整数类型

    整数类型:有效的整数数据

    • MySQL中为了数据空间的有效使用,设定了五种整数类型
      • 迷你整型:tinyint,使用1个字节存储整数,最多存储256个整数(-128~127)
      • 短整型:smallint,使用2个字节存储整数
      • 中整型:mediumint,使用3个字节存储整数
      • 标准整型:int,使用4个字节存储整数
      • 大整型:bigint,使用8个字节存储
    • 数值型存储在MySQL中分为有符号(有负数)和无符号(纯正数)需要unsigned 修饰整型

    示例:设计一个表记录个人信息:年龄、头发数量

    # 年龄:没有负数,正常年龄也不超过200岁,迷你整型无符号即可
    # 头发数量:没有负数,大概在几百万根,所以标准整型无符号即可
    create table t_7(
    	age tinyint unsigned, # unsigned修饰整数,表示无符号(从0开始)
        haircount int unsigned
    )charset utf8;
    

    显示宽度:int(L),整数在数据库中显示的符号(数字+符号)个数

    • 显示宽度一般是类型能表示的最大值对应的数字个数(通过desc查看表字段显示)
    • 显示宽度包含符号(如果允许为负数,-负号会增加一个宽度)
    • 显示宽度可以主动控制:创建字段时加括号确定
    • 显示宽度不会影响类型能表示的最大数值
    • 可以通过zerofill让不够宽度的数值补充到对应宽度:在字段类型后使用zerofill

    小数类型(2种)

    1、浮点型float / double,存储不是特别精确的数值数据

    • 浮点数又称之为精度数据,分为两种
      • 单精度:float,使用4个字节存储,精度范围为6-7位有效数字
      • 双精度:double,使用8个字节存储,精度范围为14-15位有效数字
    • 浮点数超过精度范围会自动进行四舍五入
    • 精度可以指定整数和小数部分
      • 默认不指定,整数部分不超过最大值,小数部分保留2位
      • 可以指定:float/double(总长度,小数部分长度)
    • 可以使用科学计数法插入数据:AEB,A * 10 ^ B
    • 因为浮点数会自动四舍五入,所以不要使用浮点数来存储对精度要求较高的数值

    示例:记录商品的价格

    # 商品名字字符串
    # 商品价格一般都允许带小数
    create table t_11(
    	goods_name varchar(20),
        goods_price float
    )charset utf8;
    insert into t_11 values('Nokia3310',199.99);
    insert into t_11 values('Nokia6100',1999.9999);
    

    2、定点型decimal,能够保证精度的小数

    • 定点数的存储模式不是固定长度,所以数据越大占用的存储空间越长
    • 每9个数字使用4个字节存储
    • 定点型可以指定整数部分长度和小数部分长度
      • 默认不指定,10位有效整数,0位小数
      • 可以指定:decimal(有效数位,小数部分数位)
      • 有效数位不超过65个
    • 数据规范
      • 整数部分超出报错
      • 小数部分超出四舍五入

    示例:记录个人资产情况:资产和负债

    # 资产和负债应该都是精确的,小数部分可以到分
    create table t_12(
        money decimal(14,2),
        bet decimal(10,2)
    )charset utf8;
    
    insert into t_12 values(1111111111.12,1111111.999);
    insert into t_12 values(1111111111.12,99999999.999); # 错误:进位导致正数部分超过指定范围
    

    字符串类型(5种)

    1、定长型char(L),指定固定长度的存储空间存储字符串

    • 定长是指定存储长度
    • 定长的长度是字符而不是字节
      • L的最大值是255
      • 实际存储空间:L字符数 * 字符集对应字节数
    • 定长里存储的数据不能超过指定长度,但是可以小于指定长度
    • 字符串数据使用单引号或者双引号包裹
    • 定长的访问效率较高,但是空间利用率较低

    示例:记录个人信息:身份证信息和手机号码

    # 身份证为固定长度18位(数字)
    # 手机号码是11位固定长度(数字)
    create table t_13(
    	id_number char(18),
        phone_number char(11)
    )charset utf8;
    insert into t_13 values('440111999912120304','13512345678');
    

    2、变长型varchar(L),根据实际存储的数据变化存储空间

    • 变长型的存储空间是由实际存储数据决定的
    • 变长型的L也是指字符而不是字节
      • L指定的是最大存储的数据长度
      • L最大值理论是65535
      • 变长需要额外产生1-2个字节,用来记录实际数据的长度
        • 数据长度小于256个,多1个字节
        • 数据长度大于256个,多2个字节
      • 实际存储空间:实际字符数 * 字符集对应字节数 + 记录长度
    • 变长数据不能超过定义的最大长度
    • 变长字符串在读取时需要进行长度计算,所以效率没有定长字符串高
    • 变长字符串能够更好的利用存储空间

    示例:记录个人信息:用户名、密码、姓名、身份证

    # 用户名不确定长度,最长不超过50个字符
    # 密码不确定长度,最长超过15个字符
    # 姓名不确定长度,最长不超过10个字符
    # 身份证固定长度,18个字符
    create table t_14(
    	username varchar(50),
        password varchar(15),
        name varchar(10),
        id_number char(18)
    )charset utf8;
    
    insert into t_14 values('username','password','name','444111999912121111');
    

    3、文本字符串text/blob,专门用来存储较长的文本

    • 文本字符串通常在超过255个字符时使用
    • 文本字符串包含两大类
      • text:普通字符
        • tinytext:迷你文本,不超过2 ^ 8 -1个字符
        • text:普通文本,不超过 2 ^ 16 - 1个字符
        • mediumtext:中型文本,不超过 2 ^ 24 - 1 个字符
        • longtext:长文本,不超过 2 ^ 32 - 1 个字符(4G)
      • blob:二进制字符(与text类似)
        • tinyblob
        • blob
        • mediumblob
        • longblob
    • 文本字符串会自动根据文本长度选择适合的具体类型
    • 一般在文本超过255个字符时,都会使用text(blob现在极少使用)

    示例:记录新闻信息:标题、作者和内容

    # 标题一般不会超过50个字符,varchar
    # 作者一般不会超过10个字符:varchar
    # 内容通常都很长,使用text
    create table t_15(
    	author varchar(10),
        title varchar(50),
        content text
    )charset utf8;
    
    insert into t_15 values('佚名','给联合国的一封信','给联合国的一封信...');
    

    4、枚举型enum, 一种映射存储方式,以较小的空间存储较多的数据

    • 枚举是在定义时确定可能出现的可能,而后数据只能出现定义时其中的一种的数据类型
    • 枚举类似一种单选框
    • 枚举使用1-2个字节存储,最多可以设计65535个选项
    • 枚举实际存储是使用数值,映射对应的元素数据,从1开始
    • 枚举语法:enum(元素1,元素2,...元素N)
    • 使用枚举的作用:
      • 规范数据模型
      • 优化存储空间

    示例:记录人群类型:小朋友、少年、青年、中年、老年,每个人实际只属于一种类别

    # 要保证未来数据只能出现在某种可能中,所以要先列出来,可以使用enum
    create table t_16(
    	type enum('小朋友','少年','青年','中年','老年')
    )charset utf8;
    
    insert into t_16 values('少年');
    insert into t_16 values('仙人');	# 不存在的数据不能插入
    

    枚举定义原理:

    枚举数据映射值
    数据11
    数据22
    数据NN(小于65535)

    数据存储(读取反过来):

    指令开始
    插入数据
    读取映射关系
    元素==数值
    数值==数值
    数值存储到字段
    结束

    5、集合型set,一种映射存储方式,以较小的空间存储较多的数据

    • 集合是在定义时确定可能出现的元素进行穷举,而后数据只能出现定义时其中的元素(可以是多个
    • 集合类似一种多选框
    • 集合使用1-8个字节存储数据,最多可以设计64个元素
    • 集合实际存储是使用数值(二进制位),映射对应的元素数据,每个元素对应一个比特位
      • 数据存在:对应位为 1
      • 数据不存在:对应位为 0
    • 集合语法:set(元素1,元素2,...元素N)
    • 使用集合的作用:
      • 规范数据模型
      • 优化存储空间

    示例:记录个人的球类爱好,有篮球、足球、羽毛球、网球、乒乓球、排球、台球、冰球

    # 爱好可以是多种,并非固定的,但是只能从规定的类型中选择
    create table t_17(
    	hobby set('足球','篮球','羽毛球','网球','乒乓球','排球','台球','冰球')
    )charset utf8;
    
    insert into t_17 values('足球');
    insert into t_17 values('冰球,台球,篮球');
    

    集合定义原理:

    集合数据映射位
    数据100000001
    数据200000010
    数据810000000

    数据存储(读取反过来):

    指令开始
    插入数据
    读取映射关系
    元素选中==位值为1
    元素未选中==位值为0
    转化成十进制存储
    结束

    时间日期类型(5种)

    1、年year,MySQL中用来存储年份的类型

    • MySQL中使用1个字节存储年份
    • year能够表示的范围是1901-2155年(256年)
      • year的特殊值是:0000
    • year允许用户使用两种方式设计(效果一样)
      • year
      • year(4)
    • 因为year字段表示的范围有限,所以通常会使用字符串来存储(牺牲空间换安全)

    示例:记录个人的出生年份

    create table t_18(
    	y1 year,
        y2 year(4)
    )charset utf8;
    insert into t_18 values(1901,2155);
    

    2、时间戳timestamp,基于格林威治时间的时间记录

    • MySQL中时间戳表现形式不是秒数,而是年月日时分秒格式
      • YYYY-MM-DD HH:II::SS
      • YYYYMMDDHHIISS
    • timestamp使用4个字节存储
      • 表示范围是 1971年1月1日0时0分0秒-2155年12月31日23是59分59秒
      • timestamp可以使用 0000-00-00 00:00:00
    • 所对应的记录不论哪个字段被更新,该字段都会更新到当前时间
    • 但在MySQL8中需要主动使用on update current_timestamp才会自动更新

    示例:记录商品库存的最后更新时间

    create table t_19(
    	goods_name varchar(10),
        goods_inventory int unsigned,
        change_time timestamp
    )charset utf8;
    
    insert into t_19 values('Nokia3110',100,'1971-01-01 00:00:00');
    insert into t_19 values('Nokia7100',100,'19710101000000');
    

    注意:在MySQL8以后,取消了timestamp的默认自动更新,如果需要使用,需要额外使用属性: on update current_timestamp

    alter table t_19 add c_time timestamp on update current_timestamp;
    
    update t_19 set goods_inventory = 80;
    

    3、日期date,用来记录年月日信息

    • 使用3个字节存储数据
    • 存储日期的格式为:YYYY-MM-DD
    • 存储的范围跨度很大,存储区间是1000 - 9999年:1001-01-01~9999-12-31

    示例:记录个人生日

    create table t_20(
    	name varchar(10),
        birth date
    )charset utf8;
    
    insert into t_20 values('Jim','2000-12-12');
    insert into t_20 values('Tom','10011212');
    

    4、日期时间datetime,用来综合存储日期和时间

    • 使用8个字节存储数据
    • 存储格式为:YYYY-MM-DD HH:II:SS
    • 存储区间为:1000-01-01 00:00:00 到9999-12-31 23:59:59

    示例:记录个人具体的出生时间

    create table t_21(
    	name varchar(10),
        birth datetime
    )charset utf8;
    
    insert into t_21 values('Jim','2000-12-12 12:12:12');
    insert into t_21 values('Tom','10011212182323');
    

    5、时间time,用来记录时间或者时间段

    • 使用3个字节存储数据
    • 数据范围是 -838:59:59 - 838:59:59
    • 数据插入的格式分为两种
      • 时间格式:[H]HH:II:SS([ ]表示可以没有)
      • 时间段格式:D HH:II:SS(D表示天)
      • time类型通常被用来做时间段计算:如多少天后的什么时间点(可以理解为过期检查)

    示例:记录用户登录的具体时间

    # 具体登录时间可以使用时间戳(包含年月日时分秒信息)
    # 也可以时间datetime格式,或者date+time双字段格式(具体后面学习范式时会知道该怎么用)
    create table t_22(
    	login_time1 int unsigned,
        login_time2 datetime,
        login_date date,
        login_time3 time
    )charset utf8;
    
    insert into t_22 values(12345678,'2000-12-12 12:12:12','2000-12-12','12:12:12');
    insert into t_22 values(1234567,'2000-12-12 12:12:12','2000-12-12','3 12:12:12');
    

    属性

    属性:建立在字段类型之后,对字段除类型之外的其他约束

    • 属性是在定义表字段的时候针对每个字段进行属性设定,是MySQL用来增加字段规范和约束
    • 设定好的属性可以通过查看表字段desc进行查看
    • 数据在进行增删改(写)操作时需要在满足字段类型属性的要求
    • 用好属性能够提升数据的有效性,方便未来进行数据操作和数据分析(数据真实性和有效性)

    查看表属性:desc 表名;

    desc t_1;
    # Field:字段名字
    # Type:数据类型
    # Null:是否为空(属性)
    # Key:索引类型(属性)
    # Default:默认值(属性)
    # Extra:额外属性
    

    NULL属性

    NULL:数据是否允许为空

    • Null/Not Null属性 是用来限定数据是否为Null值

    • 默认情况下数据是允许为Null的,不为空设计:Not Null

    • 一般有效的数据都必须设定为Not Null来保证数据的有效性,数据为空一般不具备运算和分析价值

    示例:用户信息表:用户名、密码、姓名、年龄、注册时间

    create table t_23(
    	username varchar(50) not null,
        password char(32) not null,
        name varchar(20),
        age tinyint unsigned,
        reg_time int unsigned not null
    )charset utf8;
    

    Default属性

    默认值default,在设计表字段的时候给定默认数据,在后续字段操作(数据新增)的时候系统没有检测到字段有数据的时候自动使用的值

    • 默认值在字段设置的时候使用(默认值需要满足数据类型规范)
    • 默认值通常设计的是字段容易出现的数据
      • 一般字段的默认值 默认是Null
    • 默认值触发
      • 在系统进行数据插入时自动检测触发
      • 主动使用default关键字触发默认值

    示例:用户开户:银行卡账号、身份证号码、姓名、账户余额

    create table t_24(
    	account varchar(19) not null,
        id_card char(18) not null,
        name varchar(20) not null,
        money decimal(16,2) default 0.00 not null
    )charset utf8;
    

    主键

    主键primary key,用来保证整张表中对应的字段永远不会出现重复数据(唯一性

    • 主键在一张表中只能有一个
    • 主键的另外一个特性是能够提升主键字段作为查询条件的效率(索引)
    • 主键不能为空:Not Null(默认)
    • 逻辑主键:数据没有具体业务意义,纯粹是一种数值数据
      • 逻辑主键通常是整数:int
      • 逻辑主键目的是方便检索和数据安全(不暴露数据真实信息)
    • 复合主键:多个字段共同组成不能重复的数据
      • primary key(字段1,字段2,…字段N)
      • 联合主键使用不多,一般也不会超过2个字段

    示例:银行账户信息:账户、姓名、余额

    # 银行账户具有唯一性,不能重复,也不允许为空
    create table t_25(
        account varchar(17) primary key,
        name varchar(20) not null,
        money decimal(16,2) not null default 0.00
    )charset utf8;
    
    # 复合主键
    create table t_26(
    	account varchar(17),
        name varchar(20),
        money decimal(16,2) not null default 0.00,
        primary key(account,name)
    )charset utf8;
    
    # 一般使用逻辑主键
    create table t_27(
    	id int unsigned primary key,
        account varchar(17) not null,
        name varchar(20) not null,
        money decimal(16,2) not null default 0.00
    )charset utf8;
    

    主键管理:在创建表并且已经有数据后的维护

    • 删除主键
    • 追加主键
    • 修改主键(先删除后新增)

    1、删除主键:主键只有一个,所以删除语法也比较特殊

    alter table t_26 drop primary key;
    

    2、后期新增主键:如果是针对业务主键需要保证字段数据没有Null数据且没有数据重复(一般主键都会在表创建时维护好)

    alter table t_26 add primary key(account,name);
    

    自增长属性

    自增长auto_increment,被修饰的字段在新增时,自动增长数据

    • 自增长只能是整数类型,而且对应的字段必须是一个索引(通常逻辑主键)
    • 一张表只能有一个自动增长
    • 自增长一般是配合逻辑主键实现自动增长
      • 整型字段
      • 存在索引(主键)
    • 自增长数据可以理解为一种默认值,如果主动给值,那么自动增长不会触发
    • 自增长由两个变量控制
      • 初始值:auto_increment_offset,默认是1
      • 步长:auto_increment_increment,默认值也是1
      • 查看自增长控制:show variables like 'auto_increment%';

    示例:记录学生信息:学号和姓名

    # 学生信息:学号自动增长
    create table t_28(
        id int primary key auto_increment,
    	stu_no int(8) zerofill not null,
        stu_name varchar(20) not null
    )charset utf8;
    

    自增长管理:在某些特殊使用下,需要自增长按照需求实现

    • 修改表中自增长的值:让下次自增长按照指定值开始
    • 修改自增长控制:调整自增长的变化

    1、修改表中自增长的值:跳过一些值,直接从下次开始按照新的目标值出现

    alter table t_28 auto_increment = 50;
    

    注意:奇数会保留原值,偶数会自动加1(可能出现的情况)

    2、修改自增长控制:步长和起始值(修改针对的是整个数据库,而非单张表)

    set auto_increment_increment = 2;	# 当前用户当前连接有效(局部)
    set @auto_increment_increment = 2;	# 所有用户一直有效(全局)
    

    唯一键

    唯一键unique key,用来维护数据的唯一性

    • 一个表中可以有多个唯一键
    • 唯一键与主键的区别在于 唯一键允许数据为Null(而且Null的数量不限)
    • 唯一键与主键一样,可以提升字段数据当做条件查询的效率(索引)
    • 复合唯一键:多个字段共同组成
      • unique key(字段1,字段2,…字段N)
      • 一般不会出现,最多2个字段组成

    示例:学生成绩表:一个学生只能有一个学科成绩,但是可以有多个学科

    # 学号和学科编号共同组成唯一
    create table t_30(
    	id int primary key auto_increment,
        stu_name varchar(20) not null,
        course varchar(20) not null,
        score decimal(5,2),
        unique key(stu_name,course)
    )charset utf8;
    
    insert into t_30 values(null,'Jim','Math',50);
    insert into t_30 values(null,'Jim','English',80);
    

    唯一键管理:在表创建后对唯一键的管理

    • 删除唯一键相对麻烦,一张表中不止一个唯一键

    • 新增唯一键要保证字段里的数据具有唯一性

    • 删除唯一键:alter table 表名 drop index 唯一键名字;

    • 新增唯一键: alter table 表名 add unique key(字段列表);

    1、删除表中已有的唯一键

    alter table t_30 drop index stu_name;
    

    2、追加唯一键

    alter table t_30 add unique key stu_course (stu_name,course);
    

    comment属性

    描述comment,是用文字描述字段的作用的

    • comment代表的内容是对字段的描述
      • 方便以后自己了解字段的作用
      • 方便团队了解字段的作用
    • 描述如果涉及到字符集(中文)一定要在创建表之前 设置好客户端字符集(否则会出现描述乱码)

    示例:学生成绩表

    # 学生成绩表中通常是存储学生学号
    # 学科通常也是学科代码
    create table t_31(
    	id int primary key auto_increment,
        stu_no varchar(10) not null comment '学号',
        course_no varchar(10) not null comment '课程号',
        score decimal(5,2) comment '考试成绩',
        unique key stu_course (stu_no,course_no) comment '学号和课程号组成唯一键'
    )charset utf8;
    

    数据库记录长度

    数据库记录长度:MySQL中规定一条记录所占用的存储长度最长不超过65535个字节

    • 记录长度为表中所有字段预计占用的长度之和
    • 所有字段只有允许Null存在,系统就会预留一个字节存储Null(多个Null也只要一个就好)
    • 因为MySQL记录长度的存在,varchar永远达不到理论长度
      • GBK存储:65535(字符) * 2 + 2 = 131072(字节)
      • UTF8存储:65535(字符) * 3 + 2 = 196607(字节)
    • 一般数据长度超过255个字符都会使用 text/blob 进行存储(数据存储不占用记录长度)

    1、GBK表能存储的最大varchar字符串长度

    create table t_32(
    	content varchar(65535)
    )charset gbk;	# 错误
    
    create table t_32(
    	content varchar(32767)
    )charset gbk;	# 错误
    
    create table t_32(
    	content varchar(32766)
    )charset gbk;	
    

    2、UTF8表能存储的最大varchar字符串长度

    create table t_33(
    	content varchar(65535)
    )charset utf8;	# 错误
    
    create table t_33(
    	content varchar(21844)
    )charset utf8;
    

    3、Null也要占用一个字节

    create table t_34(
        id tinyint,
    	content varchar(21844)
    )charset utf8;	# 错误
    
    create table t_34(
        id tinyint not null,
    	content varchar(21844) not null
    )charset utf8;
    
    展开全文
  • 展开全部sql中定义年龄可以用的用数据类型及长度:1、char(3) :长度为3的字符串。小于10位且62616964757a686964616fe59b9ee7ad9431333431373865长度基本固定的字符串用char。2、varchar(3):长度为3的字符串。长度...

    展开全部

    sql中定义年龄可以用的用数据类型及长度:

    1、char(3) :长度为3的字符串。小于10位且62616964757a686964616fe59b9ee7ad9431333431373865长度基本固定的字符串用char。

    2、varchar(3):长度为3的字符串。长度大于10的用varchar,varcha在10以内占用空间比char大。

    3、int:长度为4个字节,存储从(-2147483648)到(2147483647)。

    4、Smallint:长度为2个字节,存储从-32768到32767。

    5、tinyint:长度为1个字节,存储0到255的数字。

    扩展资料

    sql数据类型使用范围

    Text:用于文本或文本与数字的组合。最多255个字符。

    Memo:用于更大数量的文本。最多存储65536个字符。

    Byte:允许0到255的数字。

    Integer:允许介于-32768到32767之间的数字。

    Long:允许介于 -2147483648 与 2147483647之间的全部数字。

    Single:单精度浮点。处理大多数小数。

    Double:双精度浮点。处理大多数小数。

    Currency:用于货币。支持15位的元,外加4位小数。

    AutoNumber:字段自动为每条记录分配数字,通常从1开始。

    Date/Time:用于日期和时间。

    Yes/No:逻辑字段,可以显示为Yes/No、True/False或On/Off。在代码中,使用常量True和 False(等价于1和 0);Yes/No字段中不允许Null值。

    Ole Object:可以存储图片、音频、视频或其他BLOBs (Binary Large OBjects)。

    Hyperlink:包含指向其他文件的链接,包括网页。

    展开全文
  • MySQL常用数据类型

    千次阅读 2021-01-19 06:54:37
    数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则。Mysql的常用数据类型主要有一下四种:串数据类型、数值数据类型、日期和时间数据类型、二进制数据类型。一.串数据类型这是最常用的数据类型,...
  • +------+------+ | id | no | +------+------+ | 127 | 127 | | -9 | 9 | | -9 | 0 | | 1 | 255 | +------+------+ 4 rows in set (0.00 sec) 此类型字段应用场景: 如果有业务字段只存储性别、状态、类型等少量...
  • impala中转换字段类型,类型强转

    千次阅读 2019-10-30 12:10:17
    cast(字段名 as 要转换为的类型) 例如:要将student表中的age字段(原本是int类型)转成string类型,如下: cast(student.age as string) as age --年龄
  • ES 字段类型Field type

    千次阅读 2021-03-03 10:03:47
    ELasticsearch 5.X之后的字段类型不再支持string,由text或keyword取代。 如果仍使用string,会给出警告。 因为本地测试是要的ES版本是7.4.2,不支持string类型,这里就不做创建演示了。 1.1.2 text类型 text类型...
  • 表定义基本形式:create table 【if not exists】 表名 ( 字段列表 【,索引或约束列表】) 【表选项列表】;或:create table 【if not ...字段的定义一个字段的定义形式为:字段名 字段类型 【字段属性1 字段属性2...
  • MySql 数据类型

    千次阅读 2021-01-19 11:29:35
    一、数字类型数字类型按照我的分类方法分为三类:整数类、小数类和数字类。我所谓的“数字类”,就是指 DECIMAL 和 NUMERIC,它们是同一种类型。它严格的说不是一种数字类型,因为他们实际上是将数字以字符串形式...
  • 1.新建一张表,并且加上索引 ... `age` int unsigned NOT NULL DEFAULT '5' COMMENT '年龄', `name` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '姓名', `user_id` int DEFAULT NUL...
  • mysql 字段存储类型

    千次阅读 2021-01-18 19:04:22
    1、数字类型有符号 无符号 存储(bytes)tinyint-128到127 0到2551 = 2^8 (1个字节等于8位二进制)smallint -32768到32767 ...
  • 【单选题】在MySQL中,设有学生表Student(sno,sname,sage),各字段的含义分别是学生学号、姓名、年龄。其中数据类型分别为(char(4),char(20),tinyint(1)),下列语句会报错是( )。 【单选题】如果一个字段的数据...
  • How to insert a NULL or empty value in a mysql date type field (NULL = yes).If I try to insert an empty value it inserts 0000-00-00 but I want to keep it empty or NULL.Thanks for help.UPDATEPlease see...
  • 问题 某天,在处理数据时,发现Spark sql (版本:Spark-1.6.3 )在进行 join 时,...A 表中的 BigInt 类型和 B表中的 String 类型关联,关联出来的结果重复了,不是我们想要的结果。 表一:t_test_bigint creat...
  • ElasticSearch 6.x 学习笔记:12.字段类型

    万次阅读 多人点赞 2018-01-12 23:03:45
    12.1 字段类型概述 一级分类 二级分类 具体类型 核心类型 字符串类型 string,text,keyword 整数类型 integer,long,short,byte 浮点类型 double,float,half_float,scaled_floa
  • ES Mapping、字段类型Field type详解

    万次阅读 多人点赞 2018-10-15 15:02:18
    字段类型概述 一级分类 二级分类 具体类型 核心类型 字符串类型 string,text,keyword 整数类型 integer,long,short,byte 浮点类型 double,float,half_float,scaled_float 逻辑类型 boolean 日期类型 date 范围类型 ...
  • Elasticsearch6.x字段类型

    千次阅读 2018-09-28 15:56:59
    12.1 字段类型概述 一级分类 二级分类 具体类型 核心类型 字符串类型 string,text,keyword 整数类型 integer,long,short,byte 浮点类型 double,float,half_float,scaled_float 逻辑类型 ...
  • 全文11000字左右,详细地对数据类型字段属性进行说明,并且通过一个个小案例来证实其作用。
  • pgsql字段类型转换 timez转timestamp Navicat修改字段类型报错 automatically pgsql时间类类型相互转 由于手误,利用PowerDesigner创建表字段的时候,有张表的时间字段类型选择成了timez(timestamp with time zone),...
  • 【单选题】分配系数与下列哪些因素有关【单选题】玻璃电极使用前,需要【单选题】如果一个字段的数据必须来源另一个表的主键,那么要在这个字段上建立( )。【单选题】No one had ever been able to explain the _____...
  • mysql数据类型、字段类型

    千次阅读 2016-07-13 16:10:52
    mysql数据类型、字段类型 1. mysql的数据类型  在mysql中有如下几种数据类型:  (1)数值型  数值是诸如32 或153.4 这样的值。mysql 支持科学表示法,科学表示法由整数或浮点数后跟“e”或“e”、一...
  • 视图创建 create or replace view user.v_users as ...视图字段注解 comment on column user.v_users.id is '用户ID'; comment on column user.v_users.name is '用户姓名'; comment on column us
  • 一、创建表的完整语法#[]内的可有可无,即创建表时字段名和...#解释:类型:使用限制字段必须以什么样的数据类型传值约束条件:约束条件是在类型之外添加一种额外的限制#注意:a、在同一张表中,字段名是不能相同b、...
  • MySQL(二) 数据库数据类型详解

    千次阅读 2021-01-18 21:29:48
    序言今天去健身了,感觉把身体练好还是不错的,闲话不多说,把这个数据库所遇到的数据类型今天统统在这里讲清楚了,以后在看到什么数据类型,咱度应该认识,对我来说,最不熟悉的应该就是时间类型这块了。...
  • 最近在统计用户年龄,并且需要分组来计数: SELECT IFNULL(count(id),0)num1 from fweb_auth_user_info where TIMESTAMPDIFF(YEAR,birthday,now()) < 18 UNION All SELECT IFNULL(count(id),0)num2 from fweb_...
  • updatetablenamesets_role='' altertabletablenamemodifycolumns_roleint(11) 转载于:https://www.cnblogs.com/zhaomeizi/p/10071392.html
  • ES7-字段类型

    千次阅读 2018-07-02 21:35:00
    1.ElasticSearch中字段类型 2.字符串类型 string string类型在ElasticSearch 旧版本中使用较多,从ElasticSearch 5.x开始不再支持string,由text和keyword类型替代。 text 当一个字段是要被...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,352
精华内容 39,740
热门标签
关键字:

年龄的字段类型是什么