MySQL - 表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。
1、空约束
- 两个值:null(默认的)和not null(不为空),不写时默认null。
- 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
- 使用:字段 数据类型 […] null / not null […] 。
例子:假如在一份名单里,姓名和编号这两个字段是肯定不能为空的。
CREATE TABLE t1(
-> name varchar(20) not null,
-> id varchar(20) not null
-> );
解释:如果一个字段设置为null时,插入时可以进行省略,反之,不能省略。
2.默认值
- 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
- 使用:字段 数据类型 […] default 默认值 […]
例子:设置性别时默认为男或者女。
CREATE TABLE t2( name varchar(20) not null,
id varchar(20) null,
sex char(1) not null default '男' );
解释:如果设置为null但不设置默认值,系统会为我们添加默认值为null,如果设置not null但不设置默认值,系统不会为我们添加默认值,此时插入时不能省略该字段,如果设置not null且设置默认值,在我们插入时可以省略该字段了,该字段的数值设置为默认值。
3.列描述
- 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解(相当于注释了)。
- 使用:字段 数据类型 […] comment 描述
例子:给字段进行备注
CREATE TABLE t3(
name varchar(20) comment '姓名',
id varchar(20) comment '编号'
);
4.zerofill
- zerofill属性是对整数类型后面的括号内的数值进行处理,如果没有zerofill属性,那么括号内的数值没有意义,添加该属性后,会对该整数前面补0,具体看下面案例。
- 字段 数据类型 […] zerofill […]
例子:给字段添加zerofill属性后观察变化
CREATE TABLE t4(
name varchar(20) ,
id int zerofill
);
解释:加了zerofill属性后,插入后不够整数类型后面的括号内的数值位数就会在前面补0。
5.主键
- 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型。
- 建表时添加主键:字段 数据类型 […] primary key […]
- 作为主键的字段会被添加not null。
例子:添加主键
CREATE TABLE t5(
name varchar(20) ,
id int primary key
);
解释:当作为主键的字段的数据存在时,不允许重复插入。
复合主键
- 在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。
- 使用:建表 primary key(字段列表)。
例子:
CREATE TABLE t6(
name varchar(20) ,
id int,
primary key(name,id)
);
解释:当使用复合主键时,只有作为主键的字段都相同时才不允许插入。
补充
- 在建表后添加主键
alter table 表名 add primary key(字段列表)
- 删除主键
alter table 表名 drop primary key;
6.自增长
- auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
- 自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值) 。
自增长字段必须是整数 。
一张表最多只能有一个自增长。- 使用:字段 数据类型 […] auto_increment […]
例子:给id添加为自增长
CREATE TABLE t9(
id int primary key auto_increment,
name varchar(20)
);
解释:作为自增长的字段,在指定插入时可以省略不写,默认从1开始,数据库也会记录它下一次插入的值(这个值是表中最大值+1),并且插入比数据库记录的值大时,数据库记录的值就会被更新。
补充:
通过ALTER TABLE语句来实现设置初始值
ALTER TABLE table_name AUTO_INCREMENT = new_initial_value;
table_name是要修改的表名,new_initial_value是要设置的新的自增初始值。
在建表时设置初始值
CREATE TABLE t11
( id int primary key auto_increment ,
name varchar(20)
)AUTO_INCREMENT=1000 ;//这里设置
7.唯一键
- 一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
- 唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。
- 使用:字段 数据类型 […] unique […]
例子:一个学生的信息,如id主要作为区分学生,可以设置为主键,但是我们每个人的qq号码也是唯一的,这时候就可以通过唯一键解决了。
CREATE TABLE t12(
id int primary key auto_increment ,
name varchar(20),
qq varchar(20) unique
) ;
解释:作为唯一键的字段可以为null,当插入相同的值时会被拒接插入。
8.外键
- 外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
- 使用:foreign key (字段名) references 主表(列)。
例子:一名学生是属于一个班级的,所以学生的表可以作为从表,班级的表可以作为主表。
主表:
CREATE TABLE myclass(
id int primary key auto_increment ,
name varchar(20)
) ;
从表:
create table stu (
-> id int primary key,
-> name varchar(30) not null
-> class_id int,
-> foreign key (class_id) references myclass(id)
-> );
先插入2个班级
插入学生
删除一个有有学生的班级
总结:收到外键的约束,学生必须要插入到存在的班级里,班级删除时只能选择无学生的班级,这样两张表就形成了约束。
原文地址:https://blog.csdn.net/2302_79539362/article/details/143877751
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!