四、MySQL的数据类型和运算符
4.1、MySQL数据类型介绍
MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。
数值数据类型: 包括整数类型 TINYINT、SMALLINT、MEDIUMINT、INT、BIFINT、 浮点小数据类型 FLOAT、DOUBLE 定点小数类型 DECIMAL 日期/时间类型: YEAR、TIME、DATE、DATETIME、TIMESTAMP 字符串类型: CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET |
整数类
MySQL中的整数型数据类型
类型名称 | 说明 | 存储需求 |
TINYINT | 很小的整数 | 1个字节 |
SMALLINT |
小的整数 | 2个字节 |
MEDIUMINT |
中等大小的整数 | 3个字节 |
INT |
普通大小的整数 | 4个字节 |
BIGINT |
大整数 | 5个字节 |
不同整数类型的取值范围
数据类型 | 有符号 | 无符号 |
TINYINT | -128~127 | 0-255 |
SMALLINT | -32768~32767 | 0~65535 |
MEDIUMINT | -8388608~8388607 | 0~16777215 |
INT | -2147483648~2147483647 | 0~4294967295 |
BIGINT | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
mysql> CREATE TABLE tmp1(x TINYINT,y SMALLINT,z MEDIUMINT,m INT,n BIGINT); Query OK, 0 rows affected (0.05 sec) mysql> DESC tmp1; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | x | tinyint(4) | YES | | NULL | | | y | smallint(6) | YES | | NULL | | | z | mediumint(9) | YES | | NULL | | | m | int(11) | YES | | NULL | | | n | bigint(20) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
浮点数类型和定点数类型
数据类型 | 说明 | 存储需求 |
FLOAT |
单精度浮点数 | 4个字节 |
DOUBLE |
双精度浮点数 | 8个字节 |
DECIMAL(M,D) |
压缩的"严格"定点数 | M+2个字节 |
mysql> CREATE TABLE tmp2 (x FLOAT(5,1), y DOUBLE(5,1),z DECIMAL(5,1)); Query OK, 0 rows affected (0.02 sec) mysql> DESC tmp2; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | x | float(5,1) | YES | | NULL | | | y | double(5,1) | YES | | NULL | | | z | decimal(5,1) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
日期与时间类型
类型名称 | 日期格式 | 日期范围 | 存储需求 |
YEAR | YYYY | 1901~2155 | 1字节 |
TIME |
HH:MM:SS | -838:59:59~838:59:59 | 3字节 |
DATE | YYYY-MM-DD | 1000-01-01~9999-12-31 | 3字节 |
DATETIME |
YYYY-MM-DD HH:MM:SS |
1000-01-01 00:00:00~ 9999-12-31 23:59:59 |
8字节 |
TIMESTAMP |
YYYY-MM-DD HH:MM:SS |
1970-01-01 00:00:01 utc~ 2038-01-19 03:14:07 utc |
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个成员) |
二进制字符串类型
类型名称 | 说明 | 存储需求 |
BIT(M) | 位字段类型 | 大约(M+7)/8个字节 |
BINARY(M) |
固定长度二进制字符串 | M个字节 |
VARBINARY(M) |
可变长度二进制字符串 | M+1个字节 |
TINYBLOB(M) |
非常小的BLOB | L+1字节,L<2^8 |
BLOB(M) |
小BLOB | L+2字节,L<2^16 |
MEDIUMBLOB(M) |
中等大小的BLOB | L+3字节,L<2^24 |
LONGBLOB(M) |
非常大的BLOB | L+4字节,L<2^32 |
4.2、常见运算符介绍
运算符连接表达式中各个操作数,其作用是用来指明对操作数所进行的运算。运用运算符可以更加灵活地使用表中的数据,常见的运算符类型有:算术运算符、比较运算符、逻辑运算符、位运算符。
算术运算符
算术运算符是SQL中最基本的运算符,包括加、减、乘、除、求余。
运算符 | 作用 |
+ | 加法运算 |
- |
减法运算 |
* |
乘法运算 |
/ |
除法运算,返回商 |
% |
求余运算,返回余数 |
mysql> CREATE TABLE tmp14 (num INT); Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO tmp14 value(64); Query OK, 1 row affected (0.01 sec) mysql> SELECT num,num+10,num-3+5,num+36.5 FROM tmp14; +------+--------+---------+----------+ | num | num+10 | num-3+5 | num+36.5 | +------+--------+---------+----------+ | 64 | 74 | 66 | 100.5 | +------+--------+---------+----------+ 1 row in set (0.00 sec) mysql> SELECT num,num/0,num%0 FROM tmp14; +------+-------+-------+ | num | num/0 | num%0 | +------+-------+-------+ | 64 | NULL | NULL | +------+-------+-------+ 1 row in set (0.00 sec)
比较运算符
运算符 | 作用 |
= | 等于 |
<=> |
安全的等于 |
<>(!=) |
不等于 |
<= |
小于等于 |
>= |
大于等于 |
> |
大于 |
IS NULL | 判断一个值是否为NULL |
IS NOT NULL |
判断一个值是否不为NULL |
LEAST |
有两个或多个参数时,返回最小值 |
GREATEST | 两个或多个参数时,返回最大值 |
BETWEEN AND |
判断一个值是否落在两个值之间 |
ISNULL | 与IS NULL 作用相同 |
IN |
判断一个值是IN列表中任意一个值 |
NOT IN | 判断一个值不是IN列表中任意一个值 |
LIKE |
通配符匹配 |
REGEXP |
正则表达式匹配 |
逻辑运算符
运算符 | 作用 |
NOT或者| | 逻辑非 |
AND或者&& |
逻辑与 |
OR 或者|| |
逻辑或 |
XOR |
逻辑异或 |
位运算符
运算符 | 作用 |
| | 位或 |
& | 位与 |
^ |
位异或 |
<< |
位左移 |
>> |
位右移 |
~ | 位取反,反转所有位 |
运算符的优先级
优先级 | 运算符 |
最低 | =(赋值运算),:= |
||,OR XOR &&,AND NOT BETWEEN,CASE,WHEN,THEN,ELSE =(比较运算),<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN | & <<,>> -,+ *,/(DIV),%(MOD) ^ -(符号),~(位反转) |
|
最高 |
! |