1.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等
(4)二进制类型:包括bit、binary、varbinary、tinyblob、blob、mediumblob和longblob。
2.整数类型
类型名称 | 说明 | 存储类型 |
---|---|---|
tinytin | 很小的整数 | 1个字节 |
smallint | 小的整数 | 2个字节 |
mediumint | 中等大小的整数 | 3个字节 |
int | 普通大小的整数 | 4个字节 |
bigint | 大整数 | 8个字节 |
3.浮点数类型和定点数类型(表示小数)
类型名称 | 说明 | 存储需求 |
---|---|---|
float | 单精度浮点数 | 4个字节 |
double | 双精度浮点数 | 8个字节 |
decimal | 压缩的“严格”定点数 | M+2个字节 |
decimal不同于float和double,其是以字符串存储的。
例:mysql> create table ex2(a float(4,1),b double(4,1),c decimal(4,1));
mysql> insert into ex2 values(4.23,4.26,4.234);
mysql> select * from ex2;
+------+------+------+
| a | b | c |
+------+------+------+
| 4.2 | 4.3 | 4.2 |
+------+------+------+
1 row in set (0.02 sec)
M成为精度:表示总共的位数;D成为标度:表示小数的位数。
4.日期与时间类型
类型名称 | 日期格式 | 日期范围 | 存储需求 |
---|---|---|---|
year | yyyy | 1901-2155 | 1个字节 |
time | hh:mm:ss | -838:59:59 | 3个字节 |
date | yyyy-mm-dd | 3个字节 | |
datetime | yyyy-mm-dd hh:mm:ss | 8个字节 | |
timestamp | yyyy-mm-dd hh:mm:ss | 4个字节 |
insert into ex4 values (now());表示现在的时间。
5.字符串类型
类型名称 | 说明 | 存储需求 |
---|---|---|
char | 固定长度非二进制字符串 | M字节,1<=m<=255 |
varchar | 变长非二进制字符串 | L+1字节,在此L<=M且1<=m<=255 |
tinytext | 非常小的非二进制字符串 | L+1字节,在此L<28 |
text | 小的非二进制字符串 | L+2字节,L<28 |
mediumtext | ||
longtext | ||
longtext | 枚举类型,只能有一个枚举字符串值 | 1或2个字节 |
set | 一个集合,字符串对象可以有零个或多个 |
6.二进制类型
类型名称 | 说明 |
---|---|
bit | 位字段类型 |
binary | 固定长度的二进制字符集 |
varbinary | 可变长度的二进制字符串 |
tinyblob | 非常小的blob |
blob | 小blob |
mediumblob | 中等大小的blob |
longblob | 非常大的blob |
7.如何选择数据类型
(1)整数和浮点数
如果插入的数据不需要小数部分,则用整数类型存储数据;如果需要小数部分,则使用浮点数类型。
(2)浮点数和定点数
浮点数float和double与定点型decimal的不同是,在长度固定的情况下,浮点型能表示的范围更大。对于精确度要求比较高时,要使用定点型decimal来存储。
一定要注意,如果进行数值比较时,最好使用定点型decimal。
(3)日期和时间类型
a.根据实际需要选择能够满足应用的最小存储的日期类型。
b.如果要记录年月日时分秒,并且记录的年代久远,最好使用datetime。
c.如果记录的日期需要让不同时区的用户使用,使用timestamp
(4)char与varchar
char属于固定长度的字符串,而varchar属于可变长度的字符类型。
(5)enum和set
enum只能取单值,它的数据列表时一个枚举类型。set可以取多个值。都是以字符串形式出现的,但在mysql内部,实际是以数值索引的形式存储它们。
(6)blob和text
一般保存少量字符串的时候,可以选择char或者varchar,而在保存大文件时,通常选择使用text或者blob,差别:blob能用来保存二进制数据,如照片、音频信息等;而text只能保存字符数据,如一篇文章或日记。
8.常见运算符
运算符 | 作用 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算,返回商 |
% | 求余运算,返回余数 |
mysql> insert into tmp14 value(99);
mysql> select num,num+1 from tmp14;
+------+-------+
| num | num+1 |
+------+-------+
| 99 | 100 |
+------+-------+
9.比较运算符
运算符 | 作用 |
---|---|
= | 等于 |
<=> | 安全等于(可以比较null) |
<>(!=) | 不等于 |
<= | 小于等于 |
=> | 大于等于 |
< | 小于 |
> | 大于 |
is null | 判断一个值是否为null |
is not null | 判断一个值是否不为null |
least | 在有两个或多个参数时,返回最小值 |
createst | 当有两个或多个参数时,返回最大值 |
between and | 判断一个值是否落在两个值之间 |
isnull | 与is null相同 |
in | 判断一个值是in列表中的任意一值 |
not in | 判断一个值不是in列表中的任意一值 |
like | 通配符匹配 |
regexp | 正则表达式匹配 |
例子:
mysql> select 1=2,3=3,4>5,9>2;
+-----+-----+-----+-----+
| 1=2 | 3=3 | 4>5 | 9>2 |
+-----+-----+-----+-----+
| 0 | 1 | 0 | 1 |
+-----+-----+-----+-----+
1 row in set (0.00 sec)
10.逻辑运算
运算符 | 作用 |
---|---|
not或者! | 逻辑非 |
and或者&& | 逻辑与 |
or或者|| | 逻辑或 |
xor | 逻辑异或 |
例:mysql> select not 2,not (2-2);
+-------+-----------+
| not 2 | not (2-2) |
+-------+-----------+
| 0 | 1 |
+-------+-----------+
11.位运算符:用来对二进制字节中的位进行测试、位移或者测试处理。
运算符 | 作用 |
---|---|
| | 位或 |
& | 位与 |
^ | 位异或 |
<< | 位左移 |
>> | 位右移 |
~ | 位取反,反转所有比特 |
例:mysql> select 10|15,9|4|2;
+-------+-------+
| 10|15 | 9|4|2 |
+-------+-------+
| 15 | 15 |
+-------+-------+
1 row in set (0.00 sec)
12.运算符的优先级:决定了不同运算符在表达式中计算的先后顺序。
优先级 | 运算符 |
---|---|
最低 | =赋值运算 |
||,or | |
xor | |
&&,and | |
not | |
between and,case,when,then,else | |
=比较运算,<=>,,,,,is like regexp in | |
| | |
& | |
<<,>> | |
-,+ | |
*,/,% | |
^ | |
~ | |
最高 | ! |