本文目录
一、MySQL数据类型
MySQL中的数据类型是强类型。
1.1 数值型
1、整型
整型 | 占用字节数 | 范围 |
---|---|---|
整型 | 占用字节数 | 范围 |
tinyint | 1 | -128 ~ 127(-2^7 ~ 2^8 - 1 ) |
smallint | 2 | -32768 ~ 32767(-2^15 ~ 2^16 - 1 ) |
mediumint | 3 | -8388608 ~ 8388607(-2^23 ~ 2^24 - 1 ) |
int | 4 | -2147483648 ~ 2147483647(-2^31 ~ 2^32 - 1 ) |
bigint | 8 | -9223372036854775808 ~ 92233720368547758087(-2^63 ~ 2^64 - 1 ) |
例,一个班级的学生数,我们可以直接使用tinyint,因为正常不超过127,我们就尽可能范围设置小。范围越小占用资源越少。
2、无符号整型
无符号整型(unsigned )就是没有负数,无符号整数是整数的两倍。例:
我们修改表字段属性,改为无符号整型,可以看到可以存储原来整型的两倍。
可以看到表中tinyint(3)那么这个3是什么意思呢,其实是这个整型支持最小显示宽度,如果位数不足用0填充。显示宽度默认不起作用,例:
那可以明显的看到这边位数不足3,可是也没有0填充,那是必须结合zerofill才起作用:
1.2 浮点型
浮点型 | 占用字节数 | 范围 |
---|---|---|
float (单精度型) | 4 | -3.4E + 38 ~ 3.4E+38 |
double (双精度型) | 8 | -1.8E + 308 ~ 1.8E + 308 |
1、浮点型的声明:float(M, D), double(M, D)
M: 总位数 D: 小数位数
如果不指定小数位数,float (单精度型) 默认是小数点后面6位,double (双精度型) 默认是小数点后面17位,
2、小数(定点数)
原理,将整数和小数部分分开存储。
语法: decimal(M, D)
例:
1.3 字符型
在数据库中没有字符串的概念,只有字符。
数据类型 | 描述 |
---|---|
char | 定长字符 |
varchar | 可变长度字符 |
tinytext | 2^8-1 = 255 |
text | 2^16 - 1 = 65535 |
mediumtext | 2^24 - 1 |
longtext | 2^32 - 1 |
char和varchar的区别:
- char(4) 给你四个空间,你存了一个空间,还是占用四个空间,char最长不超过255。
- varchar(4) 如果存2个空间,那么会回收2个空间,varchar理论上最长65536,但实际上达不到,因为有的字符是多字节字符。char(4)和varchar(4)都不能超过4。例:
在utf8编码下,一个字节占用3个字符:
在gbk编码下,一个字节占用2个字符:
一个表记录的所有字段的总长度不能超过65535个字节,text数据类型不受此限制。
1.4 枚举类型(enum)
从集合中只能选择一个值作为数据。
例:
可以看到约束数据。只能选择其中的一种。
枚举型是通过整型数字来管理的,从1开始,依次加1递增。例:
1.5 集合类型(set)
从集合中可以选择多个值作为数据。
插入的顺序不一样,但是显示的顺序按原来设置集合的顺序。
那么可以试试如果插入的值不在范围内:
可以发现报错了。
集合和枚举一样都是给每个元素分配一个固定的值,分配规则:从前往后以2的0,1,2,3,4,…次方。
例:
可以发现:
PHP | JAVA | Vue |
---|---|---|
1 | 2 | 4 |
所以加起来就是7。
1.6 日期类型
数据类型 | 描述 |
---|---|
datetime | 日期时间,占8个字节 (YYYY-MM-DD hh:mm:ss)范围(1000-01-01 00:00:00 ~ 9999-12-31 23:59:59) |
date | 日期占用3个字节 (YYYY-MM-DD) |
time | 时间占用3个字节 |
year | 年份占用1个字节 |
timestamp | 时间戳,占用4个字节 |
-
datetime和date
datetime格式:( YYYY-MM-DD hh:mm:ss )
年·月·日 小时:分钟:秒。date格式:(YYYY-MM-DD) -
timestamp(时间戳)
datetime类型和timestamp类型表现上是一样的,他们的区别在于:
datetime从1000到9999,而timestamp从1970年~2038(timestamp占用4个字节,和整型的范围一样,2038年01月19日11:14:07以后的描述就超过了4个字节的长度)
-
year
只能表示1901~2155之间的年份,因为只占用1个字节,只能表示255个数
-
time
表示时间,也可以表示时间间隔,范围是: -838:59:59 ~ 838:59:59
time支持以天的方式来表示时间间隔:
1.7 布尔型
MySQL不支持布尔型,但是true和false在数据库中对应的是1和0。
1.8 练习题
- 电话号码一般使用什么数据类型存储?
varchar,数字类不进行计算的一般用varchar - 手机号码用什么数据类型?
char,定长 - 性别一般使用什么数据类型存储?
char, tinyint,enum都可以 - 人的年龄信息一般使用什么数据类型?
tinyint - 照片信息一般使用什么数据类型存储?
binary,不过我们在实际中一般存储照片的地址,varchar。 - 薪水一般使用什么数据类型存储?
decimal
二、MySQL列属性
2.1 是否为空
null 表示字段值可以为空
not null 表示字段不能为空
2.2 默认值(default)
如果一个字段没有插入值,可以默认设置一个指定值。
2.3 自动增长(auto_increment)
字段值从1开始,每次递增1,自动增长的值就不会有重复,适合用来生成唯一的id,在MySQL中只要是自动增长列必须是主键。
2.4 主键(primary key)
主键:唯一标识表中的记录的一个或一组列称为主键。
主键的特点:主键不能为空,不能重复,一个表只能有一个主键。
作用:
- 保证数据的完整性。
- 加快查询的速度。
选择主键的原则
最少性:尽量选择单个建作为主键。
稳定性:尽量选择数值更新少的列作为主键。
添加主键:
删除主键:
添加主键数据:
当主键重复会报错,当设置的主键为auto_increment写入null后会自动增长,每次加1。
需要注意的是,当我们删除一个字段后,重新再添加一个字段,那么这个id会在原来被删除的主键上加1,例:
如果是truncate删除的话,那么重新插入数据,主键会从1开始:
2.5 唯一键(unique)
唯一键:
- 不能重复,可以为空。
- 一个表可以有多个唯一键。
例:
添加唯一键的写法和添加主键的写法一样,只不过 primary key 改为unique。例:
删除唯一键,由于唯一键可能有多个,所以不能想主键那样直接去删除,是通过唯一键的名字去删除唯一键。
语法show create table 表名\G
查看唯一键名字:
然后通过alter table 表名 drop index 唯一键名字;
:
2.6 备注(comment)
给每个字段,一个说明性文本。
在学习的MySQL的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。