mysql--11.约束
1 约束
1.1 什么是约束
1.2 分类
2 外键约束
2.1 demo
有一个部门的表,还有一个员工表,
createdatabase day16;
useday16;
createtable dept(
didint primary key auto_increment,
dnamevarchar(30)
);
createtable emp(
eidint primary key auto_increment,
enamevarchar(20),
salalydouble,
dnoint
);
insertinto dept values(null,'研发部');
insertinto dept values(null,'销售部');
insertinto dept values(null,'人事部');
insertinto dept values(null,'扯淡部');
insertinto dept values(null,'牛宝宝部');
insertinto emp values(null,'班长',10000,1);
insertinto emp values(null,'美美',10000,2);
insertinto emp values(null,'小凤',10000,3);
insertinto emp values(null,'如花',10000,2);
insertinto emp values(null,'芙蓉',10000,1);
insertinto emp values(null,'东东',800,null);
insertinto emp values(null,'波波',1000,null);
把研发部删除?
*研发部下有人员?该操作不合理。
*引入外键约束?
*作用:保证数据的完整性。
2.2 定义外键约束
可以直接在create语句中定义外键
foreignkey 当前表名(字段名) references 目标表名(目标表的主键)
2.2.1 添加约束
创建完语句后,可以直接使用修改语句定义
alter table 表名 add foreign key 当前表名 (字段名)references 目标表名(目标表的主键);
altertable emp add foreign key emp(dno) references dept(did);
2.2.2 删除约束
2.2.3 修改约束
3 数据库的设计
3.1 概述
3.2 1:n
生活中一个部门下有多个员工,一个员工属于一个部门。
注意:
在多方需要添加一个字段,并且和一放主键的类型必须是相同的。
把该字段作为外键指向一方的主键。
一方部门 , 多方员工
3.3 n:n
学生可以选择多门课程,课程又可以被多名学生选择。
建表原则:
拆开两个一对多的关系,中间创建一个中间表,至少有两个字段。作为外键指向两个多对多关系表的主键。
联系的属性及两个实体的主标识形成关系表。
关系表的主键为两个实体主标识的组合
3.4 1:1
公司,地址,一个公司对应的是一个地址。 一张表包含公司名称、公司地址。
根据公司的业务需求,会把公司这张表拆开,形成一对一。
建表原则
第一种是主键对应
将两个表的主键进行关联
第二种是唯一外键对应
在任何一方加一个外键,但是需要设置成唯一(unique),指向另一方的主键