MySQL数据类型和运算符

数据类型

MySQL支持多种数据类型,主要有数值类型、日期/时间类型、字符串类型。

  • 数值类型:
    1. 整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
    2. 浮点小数类型:FLOAT、DOUBLE
    3. 定点小数类型:DECIMAL
  • 日期/时间类型:YEAR、TIME、DATE、DATETIME、TIMESTAMP
  • 字符串类型:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET等。

(1)整数类型

类型名称说明存储需求取值范围(无符号数)
TINYINT很小的整数1个字节0~255
SMALLINT小的整数2个字节0~65535
MEDIUMINT中等大小的整数3个字节0~16777215
INT(INTEGER)普通大小的整数4个字节0~4294967295
BIGINT大整数8个字节0~18446744073709551615

注意:
CREATE TABLE tb_emp1
id INT(11)
);
id字段的数据类型为INT(11),注意到后面的数字11,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。
显示宽度和数据类型的取值范围是无关的。
显示宽度只是指明MySQL最大可能显示的数字个数,数值的位数小于指定的显示宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。
显示宽度只用于显示,并不能限制取值范围和占用空间。

(2)浮点数类型和定点数类型

浮点类型和定点类型都可以用(M,N)来表示其中M称为精度,表示总共的位数;N称为标度,是表示小数的位数。
类型名称 | 说明|存储需求|取值范围(无符号数)
1. | :-: | -:
FLOAT|单精度浮点数|4个字节|0和1.175494351E-38~3.402823466E+38
DOUBLE|双精度浮点数|8个字节|0和2.22507385072014E-308~1.7976931348623157E+308
DECIMAL(M,D),DEC|压缩的“严格”定点数|M+2个字节|

(3)日期和时间类型

类型名称日期格式日期范围存储需求
YEARYYYY1901~21551个字节
TIMEHH:MM:SS-838:59:59~838:59:593个字节
DATEYYYY-MM-DD1000-01-01~9999-12-33个字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00~9999-12-31 23:59:598个字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC4个字节

(1)YEAR
YEAR值的指定格式:

  1. 以4位字符串或4位数字,范围为“1901”~“2155”;
  2. 以2位字符串格式表示YEAR,范围为“00”~“99”。“00”~“69”和“70”~“99”范围的值分别被转换为2000~2069和1970~1999范围的YEAR值;
  3. 以2为数字表示的YEAR,范围为00~99。0值被转换为0000,而非2000。

(2)TIME
TIME值的指定格式:

  1. ‘D HH:MM:SS’格式的字符串。还可以使用“非严格”的语法:‘HH:MM:SS’、‘HH:MM’、‘D HH:MM’、‘D HH’或‘SS’。D表示日,可以取0~34之间的值。在插入数据库时,D被转换为小时保存,格式为“D * 24 + HH”;
  2. ‘HHMMSS’格式、没有间隔符的字符串或HHMMSS格式的数值,假定是有意义的时间。不合法的格式会变为00:00:00。

为TIME列分配简写值时应注意:如果没有冒号,MySQL解释值时,假定最右边的两位表示秒。例如,1120和‘1120’,MySQL解释为00:11:20。
TIME值中如果使用冒号则肯定被看作当天时间。例如,‘11:20’表示11:20:00。

(3)DATE类型
DATE值的指定格式:

  1. 以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示的日期,取值范围为‘1000-01-01~9999-12-3’;
  2. 以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示的日期,在这里YY表示两位的年值。‘00~69’范围的年值会转换为‘2000~2069’;‘70~99’范围的年值会转换为‘1970~1999’;
  3. 以YY-MM-DD或者YYMMDD数字格式表示的日期,与前面年值转换方法一样。
  4. 使用CURRENT_DATE或者NEW(),插入当前系统日期。

(4)DATETIME
DATETIME值的指定格式:

  1. 以‘YYYY-MM-DD HH-MM-SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的值,取值范围为‘1000-01-01 00:00:00~9999-12-31 23:59:59’;
  2. 以‘YY-MM-DD HH-MM-SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期,在这里YY表示两位的年值,与之前类似;
  3. 以YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式表示的日期和时间;

(5)TIMESTAMP
显示格式与DATETIME相同。但取值范围小于DATETIME的取值范围,为‘1970-01-01 00:00:01’ UTC~‘2038-01-19 03:14:07’ UTC,其中,UTC(Coordinated Universal Time,为世界标准时间),因此在插入数据时,要保证在合法的取值范围内。

(4)字符串类型

类型名称说明存储需求
CHAR(M)固定长度非二进制字符串M字节,1<=M<=255
VARCHAR(M)变长非二进制字符串L+1字节,在此L<=M和1<=M<=255
TINYTEXT非常小的非二进制字符串L+1字节,在此L<2^8
TEXT小的非二进制字符串L+2字节,在此L<2^16
MEDIUMTEXT中等大小的非二进制字符串L+3字节,在此L<2^24
LONGTEXT大的非二进制字符串L+4字节,在此L<2^32
ENUM枚举类型,只能有一个枚举字符串值1或2个字节,取决于枚举值的数目(最大值65535)
SET一个设置,字符串对象可以有零个或多个SET成员1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员)

1. CHAR和VARCHAR类型
CHAR(M):当检索CHAR值时,尾部的空格将被删除掉;
VARCHAR(M):VARCHAR在值保存和检索时尾部的空格仍保留。
2. TEXT类型
不同的TEXT类型的存储空间和数据长度不同:
(1)TINYTEXT最大长度为255(2^8-1)字符的TEXT列;
(2)TEXT最大长度为65535(2^16-1)字符的TEXT列;
(3)MEDIUMTEXT最大长度为16777215(2^24-1)字符的TEXT列;
(4)LONGTEXT最大长度为4294967295或4GB(2^32-1)字符的TEXT列。
3. ENUM类型
ENUM是一个字符串对象,其值为表创建时在列规定中枚举的一列值。语法格式为:

字段名 ENUM('值1', '值2', ……, '值n')
//ENUM值在内部用整数表示,每个枚举值均有一个索引值;
//列表值所允许的成员值从1开始编号,MySQL存储的就是这个索引编号。
//枚举最多可以有65535个元素。

4.SET类型
SET是一个字符串对象,可以有零或多个值,SET列最多可以有64个成员,其值为表创建时规定的一列值。语法格式如下:

SET('值1', '值2', ……, '值n')
//与ENUM类型相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号。
//当创建表时,SET成员值的尾部空格将自动被删除。
//与ENUM类型不同的是,ENUM类型的字段只能从定义的列值中选择一个值插入,
//而SET类型的列可从定义的列值中选择多个字符的联合。
//如果在插入SET字段中列值有重复,则自动删除重复的值;
//如果插入顺序不重要,按照定义的顺序显示;
//如果插入了不正确的值,默认情况下,MySQL忽略,并给出警告。

(5)二进制类型

类型名称说明存储需求
BIT(M)位字段类型大约(M+7)/8个字节
BINARY(M)固定长度二进制字符串M个字节
VARBINARY(M)可变长度二进制字符串M+1个字节
TINYBLOB(M)非常小的BLOBL+1字节,在此L<2^8
BLOB(M)小的BLOBL+2字节,在此L<2^16
MEDIUMBLOB(M)中等大小的BLOBL+3字节,在此L<2^24
LONGBLOB(M)非常大的BLOBL+4字节,在此L<2^32

运算符优先级(由低到高)

  1. 最低:=(赋值运算),:=
  2. 中间(从低到高):
    ||,OR
    XOR(异或)
    &&,AND
    NOT
    BETWEEN,CASE,WHEN,THEN,ELSE
    =(比较运算),<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN
    |
    &
    <<,>>
    -,+
    *,/(DIV),%(MOD)
    ^
    -(负号),~(位反转)
  3. 最高:!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值