什么是数据约束?
对用户操作表的数据进行约束
1.默认值
2.非空
3.唯一
4.主键
5.自增长
6.外键
1.默认值(default(默认值))
作用:当用户对使用默认值的字段不插入值的时候,就使用默认值(默认字段允许设置为null)
需求:给性别设置默认值,当插入数据时性别默认为男
create table xuesheng( id int , name varchar(20), sex varchar(20) default'男');
![](https://img.haomeiwen.com/i1616232/2bc5823bc86d3617.png)
insert into xuesheng (id,name) value(1,'马欢');
![](https://img.haomeiwen.com/i1616232/3e24fa2fed8e23ea.png)
2.非空(nut noll)
不允许默认值为null
create table student(
-> id int not null,
-> name varchar(50),
-> age int
-> );
![](https://img.haomeiwen.com/i1616232/ffcd4af9b8c17970.png)
insert into student (id,age) value(1,22);
![](https://img.haomeiwen.com/i1616232/8e1f7b8133485a3e.png)
3.唯一(unique,)
但可以存在多的null值
需求:创建表让id唯一
create table student(
id int unique,
name varchar(20)
);
![](https://img.haomeiwen.com/i1616232/c69d898edbba90e3.png)
insert into student value(1,'mahuan');
insert into student value(1,'mahuan');
![](https://img.haomeiwen.com/i1616232/697909fd4e1e1782.png)
4.主键(非空+唯一)
标记表中记录唯一性
create table student( id int primary key, name varchar(20) );
![](https://img.haomeiwen.com/i1616232/b0b8862e51d6cf8e.png)
insert into student value(2,'mahuan');
insert into student value(2,'mahuan');
insert into student(name) value('mahuan');
![](https://img.haomeiwen.com/i1616232/c54d82a12f760b0c.png)
5.自增长(auto_increment)
自增长字段可以不赋值,自动递增
create table student( id int primary key auto_increment, name varchar(20) );
![](https://img.haomeiwen.com/i1616232/9801dc43e4b52f89.png)
insert into student(name) value('马欢');
![](https://img.haomeiwen.com/i1616232/2a84f9744165db61.png)
在自增长时会有一个常用关键字(zerofill:空位用0填充)
create table student(
id int(4) zerofill primary key auto_increment,
name varchar(20)
);
![](https://img.haomeiwen.com/i1616232/17ef58b576498749.png)
insert into student(name) value('马欢');
insert into student(name) value('马欢');
insert into student(name) value('马欢');
insert into student(name) value('马欢');
![](https://img.haomeiwen.com/i1616232/5ea53714fcd738d0.png)
6.外键:( foreign key)
constraint foreign key//声明一个外键
1)当有了外键约束,添加数据顺序:先添加主表 再添加副表数据
2)当有了外键约束,修改数据顺序:先修改副表,再修改主表数据
3)当有了外键约束,删除数据顺序:先删除副表,再删除主表数据
--主表
create table emp( id int(11) NOT NULL auto_increment , name varchar(20),PRIMARY KEY (id));
insert into emp value(1,'语文');
insert into emp value(2,'英语');
insert into emp value(3,'数学');
--副表
create table employee( id int primary key auto_increment, name varchar(20),empid int(11) default NULL, KEY empid (empid),constraint employee_emp_fk foreign key(empid) references emp(id));
insert into employee value(1,'小明',2);
insert into employee value(2,'小红',1);
insert into employee value(3,'小花',2);
--错误插入
insert into employee value(4,'小花',5);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`eurasia_echarts`.`employee`, CONSTRAINT `employee_emp_fk` FOREIGN KEY (`empid`) REFERENCES `emp` (`id`))
![](https://img.haomeiwen.com/i1616232/8ae1060d1671c000.png)
直接修改主表数据,影响副表数据(级联操作:在外键基础上)(on update cascad / on delete cascad)
--主表
create table emp( id int primary key , name varchar(20));
insert into emp value(1,'语文');
insert into emp value(2,'英语');
insert into emp value(3,'数学');
--副表
create table employee( id int primary key , name varchar(20),empid int ,constraint employee_emp_fk foreign key(empid) references emp(id) on update cascade on delete cascade );
insert into employee value(1,'小明',2);
insert into employee value(2,'小红',1);
insert into employee value(3,'小花',2);
insert into employee value(4,'小花',3);
--删除主表数据,副表一同删除
delete from emp where id = 3;
![](https://img.haomeiwen.com/i1616232/e7567c75a2c45b3d.png)
上接文章:Mysql学习笔记(3)-查询数据大全
网友评论