目录
mySQL数据类型介绍
MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。
(1)数值数据类型:包括整数类型 TINYINT、 SMALLINT、 MEDIUMINT、INT、 BIGINT、浮点小数数据类型 FLOAT和 DOUBLE、定点小数类型 DECIMAL。
(2)日期时间类型:包括YEAR、TIME、DATE、 DATETIME和 TIMESTAMP。
(3)字符串类型:包括CHAR、 VARCHAR、 BINARY、 VARBINARY、BLOB、TEXT、ENUM 和SET等。
1.数值数据类型
1.1整型类型
数值型数据类型主要用来存储数字, MySQL提供了多种数值数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,其所需要的存储空间也会越大。 MySQL主要提供的整数类型有: TINYINT、 SMALLINT、 MEDIUMINT、INT( NTEGER)、 BIGINT。整数类型的属性字段可以添加 AUTO INCREMENT自增约束条件。下表列出了 MySQL中的数值类型。
类型名称 | 说明 | 存储需求 |
---|---|---|
tinyint | 很小的整数 | 1个字节 |
smallint | 小的整数 | 2个字节 |
mediumint | 中等大小的整数 | 3个字节 |
int(integer) | 普通大小的整数 | 4个字节 |
bigint | 大整数 | 8个字节 |
【例子】创建表tmpl,其中字段x、y、z、m、n数据类型依次为TINYINT、SMALLINT、MEDIUMINT、INT、 BIGINT,SQL语句如下: 执行成功之后,便用DESC查看表结构,结果如下:
mysql> create table temp1(
-> x tinyint,
-> y smallint,
-> z mediumint,
-> m int,
-> n bigint);
Query OK, 0 rows affected (0.35 sec)
mysql> desc temp1;
+-------+--------------+------+-----+---------+-------+
| 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.17 sec)
1.2浮点数类型和定点数类型
MySQL中使用浮点数和定点数来表示小数。浮点类型有两种:单精度浮点类型( FLOAT)和双精度浮点类型( DOUBLE)。定点类型只有一种: DECIMAL。浮点类型和定点类型都可以用(M,N)来表示,其中M称为精度,表示总共的位数;N称为标度,是表示小数的位数。下表列出了MySQL中的小数类型和存储需求。
MySQl中的小数类型
类型名称 | 说明 | 存储需求 |
---|---|---|
float | 单精度浮点数 | 4个字节 |
double | 双精度浮点数 | 8个字节 |
decimal(M,D),DEC | 压缩的“严格”定点数 | M+2个字节 |
2.日期时间类型
MySQL中有多种表示日期的数据类型,主要有: DATETIME、DATE、 TIMESTAMP、TIME和YEAR。例如,当只记录年信息的时候,可以只使用YEAR类型,而没有必要使用DATE每个类型都有合法的取值范围,当指定确实不合法的值时系统将“零”值插入到数据库中。本节将介绍 MySQL日期和时间类型的使用方法。
下表列出了 MySQL中的日期与时间类型:
类型名称 | 日期格式 | 存储需求 | 日期范围 |
---|---|---|---|
YEAR | YYYY | 1字节 | 1901-2155 |
TIME | HH: MM: SS | 3字节 | -838:59:59-838:59:59 |
DATE | YYYY-MM-DD | 3字节 | 1000-01-01~9999-12-3 |
DATETIME | YYYY-MM-DD HH: MM: SS | 8字节 | 1000-01-0100:00:00~9999-12-3123:59:59 |
TIMESTAMP | YYYY-MM-DD HH: MM: SS | 4字节 | 1970-01-0100:00:0lUTC~2038-01-1903:14:07 UTC |
3.字符串类型
运算符是告诉 MySQL执行特定算术或逻辑操作的符号。 MySQL的内部运算符很丰富,主要 有四大类,分别是:算术运算符、比较运算符、逻辑运算符、位操作运算符
1.算术运算符 用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)。
2.比较运算符 用于比较运算。包括大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、 不等于(!=)、以及IN、 BETWEEN AND、 IS NULL、 GREATEST、 LEAST、LIKE、 REGEXP等。
3.逻辑运算符 逻辑运算符的求值所得结果均为1(TRUE)、0( FALSE),这类运算符有逻辑非(NOT或者!)、逻辑与(AND或者&&)、逻辑或(OR或者‖)、逻辑异或(XOR) 4.位操作运算符 参与运算的操作数,按二进制位进行运算。包括位与(&)、位或(1)、位非(~)、位异或^)、左移(<<)、右移(>>)6种。 接下来将对 MySQL中各种运算符的使用进行详细的介绍。
3.1算术运算符
运算符 | 作用 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算,返回商 |
% | 求余运算,返回余数 |
3.2比较运算符
一个比较运算符的结果总是1、0或者是NULL,比较运算符经常在 SELECT的查询条件子句中使用,用来査询满足指定条件的记录。 MySQL中比较运算符如表所示。
运算符 | 作用 |
---|---|
= | 等于 |
<=> | 安全的等于 |
<>(!=) | 不等于 |
<= | 小于等于 |
>= | 大于等于 |
> | 大于 |
IS NULL | 判断一个值是否为NULL |
IS NOT NULL | 判断一个值是否不为NULL |
LEAST | 在有两个或多个参数时,返回最小值 |
GREATEST | 当有2或多个参数时,返回最大值 |
BETWEEN AND | 判断一个值是否落在两个值之间 |
ISNULL | 与IS NULL作用相同 |
IN | 判断一个值是IN列表中的任意一个值 |
NOT IN | 判断一个值不是IN列表中的任意一个值 |
LIKE | 通配符匹配 |
REGEXP | 正则表达式匹配 |
3.3逻辑运算符
在SQL中,所有逻辑运算符的求值所得结果均为TRUE、 FALSE或NULL。在 MySQL中,它们体现为1(TRUE)、0( FALSE)和NULL。其大多数都与不同的数据库SQL通用, MySQL中的逻辑运算符如表所示。
运算符 | 作用 |
---|---|
NOT或者! | 逻辑非 |
AND或者&& | 逻辑与 |
OR或者 | 逻辑或 |
XOR | 逻辑异或 |
(1)逻辑非运算符NOT或者!表示当操作数为0时,所得值为1;当操作数为非零值时,所得值为0:当操作数为NULL时,所得的返回值为NULL。
(2)逻辑与运算符AND或者&&表示当所有操作数均为非零值、并且不为NULL时,计算所得结果为1:当一个或多个操作数为0时,所得结果为0,其余情况返回值为NULL。
(3)逻辑或运算符OR或者‖表示当两个操作数均为非NULL值,且任意一个操作数为非零值时,结果为1,否则结果为0;当有一个操作数为NULL,且另一个操作数为非零值时,则结果为1,否则结果为NULL:当两个操作数均为NULL时,则所得结果为NULL。
(4)逻辑异或运算符XOR。当任意一个操作数为NULL时,返回值为NULL;对于非NULL的操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0:如果一个为0值,另一个为非0值,返回结果为1。
3.4位操作运算符
位运算符是用来对二进制字节中的位进行测试、移位或者测试处理, MySQL中提供的位运算符有按位或(|),按位与(&),按位异或(^),按位左移(<),按位右移(>),按位取反(!),如表所示
运算符 | 作用 |
---|---|
| | 位或 |
& | 位与 |
^ | 位异或 |
<< | 位左移 |
>> | 位右移 |
~ | 位反转 |
3.5运算符的优先级
运算符的优先级决定了不同的运算符在表达式中计算的先后顺序,下表列出了 MySQL中的各类运算符及其优先级。
优先级 | 运算符 |
---|---|
最低 | =(赋值运算),:= |
||,OR | |
XOR | |
&&,AND | |
NOT | |
BETWEEN, CASE, WHEN, THEN, ELSE | |
=(比较运算),<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN | |
| | |
& | |
<<,>> | |
*,/(DIV), %(MOD) | |
^ | |
-(负号),~(位反转) | |
最高 | ! |