数据库中的数据保存在数据表中,在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,比如:数据类型和约束。
数据类型和约束保证了表中数据的准确性和完整性。
1、数据类型
数据类型是指在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。
常用数据类型如下:
- 整数:int,bit 【bit字节,只能是0和1】
- 小数:decimal
- 字符串:varchar,char
- 日期时间: date, time, datetime
- 枚举类型(enum) 【比如性别:只能选男或女】
数据类型说明:
- decimal表示浮点数,如 decimal(5, 2) 表示共存5位数,小数占 2 位.
- char表示固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为' ab ',3表示字符数
- varchar表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab',3表示字符数
- 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径.
- 字符串 text 表示存储大文本,当字符大于 4000 时推荐使用, 比如技术博客.
2、数据约束
约束是指数据在数据类型限定的基础上额外增加的要求.
常见的约束如下:
- 主键 primary key: 物理上存储的顺序. MySQL 建议所有表的主键字段都叫 id, 类型为 int unsigned.
- 非空 not null: 此字段不允许填写空值.
- 惟一 unique: 此字段的值不允许重复.
- 默认 default: 当不填写字段对应的值会使用默认值,如果填写时以填写为准.
- 外键 foreign key: 对关系字段进行约束, 当为关系字段填写值时, 会到关联的表中查询此值是否存在, 如果存在则填写成功, 如果不存在则填写失败并抛出异常.
【id一般是主键,主键是标识数据记录, 通过id可以区分不同记录数据 , id是主键,是唯一的, 不能重复, 外键就是使用某个表中的主键数据,可以根据外键进行连表查询】
3、数据类型附录表
3.1 整数类型
类型 | 字节大小 | 有符号范围(Signed) | 无符号范围(Unsigned) |
---|---|---|---|
TINYINT(m) | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT(m) | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT(m) | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT/INTEGER(m) | 4 | -2147483648 ~2147483647 | 0 ~ 4294967295 |
BIGINT(m) | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
数值类型中的长度 m 是指显示长度,并不表示存储长度,只有字段指定 zerofill 时有用。
例如: int(3) ,如果实际值是 2 ,如果列指定了 zerofill ,查询结果就是 002 ,左边用 0 来 填充。
3.2 浮点数类型
MySQL
数据类型
|
含义
|
float(m,d)
|
单精度浮点型
8
位精度
(4
字节
) m
总个数,
d
小数位
|
double(m,d)
|
双精度浮点型
16
位精度
(8
字节
) m
总个数,
d
小数位
|
3.3 字符类型
类型 | 说明 | 使用场景 |
---|---|---|
CHAR(n) | 固定长度,小型数据,最多255个字符 | 身份证号、手机号、电话、密码 |
tinytext
|
可变长度,最多
255
个字符
| |
VARCHAR(n) | 可变长度,小型数据,最多65535个字符 | 姓名、地址、品牌、型号 |
TEXT | 可变长度,最多65535个字符 | 存储小型文章或者新闻 |
mediumtext
|
可变长度,最多
2
的
24
次方
-1
个字符
| |
LONGTEXT | 可变长度, 极大型文本数据,最多2的32次方-1个字符 | 存储极大型文本数据 |
char和varchar:
- char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定长。
- varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
- text不设置长度, 当不知道属性的最大长度时,适合用text。
按照查询速度: char最快, varchar次之,text最慢。
字符串型使用建议:
- 经常变化的字段用varchar
- 知道固定长度的用char
- 尽量用varchar
- 超过255字符的只能用varchar或者text
- 能用varchar的地方不用text
3.4 日期类型
类型 | 字节大小 | 含义 | 示例 |
---|---|---|---|
DATE | 4 |
日期
YYYY-MM-DD
| '2020-01-01' |
TIME | 3 |
时间
HH:MM:SS
| '12:29:59' |
DATETIME | 8 |
日期时间
YYYY-MM-DD HH:MM:SS
| '2020-01-01 12:29:59' |
YEAR | 1 | '2017' | |
TIMESTAMP | 4 |
时间戳
YYYYMMDD HHMMSS
| '1970-01-01 00:00:01' UTC ~ '2038-01-01 00:00:01' UTC |
3.5 二进制数据类型
- BLOB和TEXT存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写。
- BLOB存储的数据只能整体读出。
- TEXT可以指定字符集,BLOB不用指定字符集。