这篇文章讲解了 MySQL 中的常见数据类型和字段的常见属性。
什么是数据类型?
和计算机打交道的都是数据,这时候就涉及到该给这样一个符号,也就是数据分配多少内存。可能你会说,就按照这个符号在字符集中对应的二进制所占字节数来给它非配内存就可以了啊。如果这样的话,就会导致不同的数据所占的长度没有规律可言,带来很多不便。
所幸,数据之间本身就可以分为不同的类型,我们只需要指定这个数据所属的类型,然后根据这种类型来给它分配固定大小的内存就可以了。
既然固定了内存大小,就不可避免的涉及到了数据会不会超出表示范围,会不会不属于这种数据类型等等问题。任何事物都是有两面性的嘛。
MySQL 中有哪些数据类型?
MySQL 中的数据类型可以分为三类,直接上图。
MySQL 中整出个数据类型的好处,就是有效利用存储空间,还能检测存储的数据是否符合规范啦。
数值型介绍
上图已经展示得很清楚了,这里简单讲讲。
对于整数型数据,分为有符号型和无符号型,默认是有符号。若需要定义无符号型,需要在数据类型后加上 unsigned 关键字。超出数据表示范围会报错,数据无法插入。
对于小数型,需要指定数据类型的 M D 值,超出小数表示精度,会自动四舍五入。
如:alter table student add height float(10,2) unsigned 。根据实际情况选择需要的数据类型即可。
日期/时间型数据
根据实际情况选择就可以了,用的多的还是 date 和 datetime 类型。这里涉及到数据是否符合规范的问题,在前台就可以判断了,完全没有必要提交到数据库来判断。
字符型数据
char 类型属于定长字符串,比如,char(4) 表示 4 个字符,根据字符集不同,会有不同的长度,在 utf-8 中,就是占据 12 个字节了。无论数据是否占满,都会在磁盘上占据 12 个字节。
另一类就是变长字符串了, varchar(10) 表示最大会占据 10 个字符的宽度,如果没有占满,会自动收缩。
text 文本字符串,用于存储大量的文字。
字段的属性
字段不可避免存的需要附加上一些属性,下面会简单讲几个。
空属性 null ,在创建字段时,默认字段表示的值是可以为 null 的,如果实际业务中,某项信息不能为空,则需要指定为 not null 。
create table table1(name varchar(10) not null,pwd varchar(20) not null)
列描述 comment ,有时字段名不能很好的表示字段表示的信息,这时可以添加 comment 属性用来描述字段相关信息。
create table table2(name varchar(10) not null,zbr varchar(20) not null comment '这个字段表示值班人信息')
默认值 default ,有时字段可以指定一个默认值,非常方便。
create table table3(name varchar(10) not null,sex varchar(1) not null default '男')
需要使用默认值时,可以用 default 指定。
insert into table3('root',default)
主键 primary key ,主键一般不采用实际业务信息,只用来唯一表示这条记录。主键可以分为单主键(单个字段设置为主键)和复合主键(将多个字段作为一个整体设置为主键)。一张表中只能有一个主键
create table table1(name varchar(10) primary key,pwd varchar(20) not null) -- 单主键形式
或者 create table table1(name varchar(10),pwd varchar(20),primary key(name,pwd) -- 复合主键形式
自增长 auto_increment ,有些字段可以设置为自增长,主键就非常适合。默认是从 1 开始,每次增长 1,也可以自己更改基值和跨度。
create table table1(id int primary key auto_increment,name varchar(10) not null,pwd varchar(20) not null)
唯一键 unique ,很所时候,业务需要保证某个字段唯一,比如注册账号用的手机号。一张表中可以有多个唯一键
create table table1(name varchar(10) unique,pwd varchar(20) not null) -- 单唯一键形式
create table table1(name varchar(10),tel varchar(10),pwd varchar(20) not null,unique key(name,tel)) -- 多唯一键形式