MySQL主键、外键以及子表的删除、更新约束
来源:互联网 发布:生化危机人工智能白后 编辑:程序博客网 时间:2024/05/16 17:29
1、什么是主键、外键
主键是指数据表中能唯一识别一条记录,并且被设置为 PRIMARY KEY的字段。主键可以是一个单一的字段,也可以是联合的多个字段。比如,下面建表SQL中就将 userId 设置为主键。
CREATE TABLE `user` ( `userId` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `sex` int(11) NOT NULL, `job` int(11) NOT NULL, PRIMARY KEY (`userId`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
下面的建表SQL中将 organ 表的 userId 设置为外键,该外键引用 user 表的 userId 字段,因此 user 表被设置成 organ 表的主表,organ表即为 user 表的子表。子表的外键,必须是主表的主键。
CREATE TABLE `organ` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userId` int(11) DEFAULT NULL, `type` int(11) DEFAULT NULL, `score` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `uk` (`userId`), CONSTRAINT `uk` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8
外键的作用主要是建立主表和子表的从属关系,以保证数据现实意义的完整。比如,我们有一个学生信息表和一个学生成绩表,其中学生信息表是主表,它的学号是主键也是学生成绩表的外键。如果某个学号在学生信息表中不存在,那么我们就不能在学生成绩表中添加该学号的学生成绩。如果将某个学生从学生信息表删除,那么学生成绩表中跟该学生相关的记录都变得没有存在价值,也应当被删除。
2、子表的删除、更新策略
子表的删除更新策略一共有四种:
1)CASCADE 级联策略。使用此种策略时主表的记录被删除或者主键字段被修改时会同步删除或修改子表
2)NO ACTION 无动作策略。使用此种策略时要删除主表必须先删除子表,要删除主表的记录必须先删除子表关联的记录,不能更新主表主键字段的值。
3)RSTRICT 主表约束策略。此种策略对主表的约束跟 NO ACTION 一样
4)SET NO 置空策略。使用此种策略时,如果主表被删除或者主键被更改,则将子表中的外键设置为NULL。需要注意的是,如果子表的外键是主键或者是设置为NOT NULL的,则主表的删除和主键的更改跟 NO ACTION 一样。
阅读全文
0 0
- MySQL主键、外键以及子表的删除、更新约束
- MySql入门之一:DDL操作创建表(添加主键, 外键约束以及基本的数据类型)
- MySql之DDL操作创建表(添加主键, 外键约束以及基本的数据类型)
- 数据库__SQL的主键和外键约束_级联更新_级联删除
- MySQL--修改数据表5:删除主键约束,唯一约束,外键约束
- mysql表相关的约束,主键外键。
- Oracle主键外键 约束的 创建,添加和删除
- Oracle主键外键 约束的 创建,添加和删除
- MySQL约束:非空约束、主键约束、唯一约束、默认约束、外键约束
- 查看mysql所有的主键,外键约束名称
- 【0016】MySQL外键约束删除时和更新时各取值的含义
- MySQL外键约束删除时和更新时各取值的含义
- MySQL删除表的时候忽略外键约束
- MySQL删除表的时候忽略外键约束
- mysql--删除表的主键
- MySQL删除所有表的外键约束、禁用外键约束
- MySQL删除外键约束
- 具有主键约束的两个表的数据的删除
- 使用Git进行版本控制
- LeetCode 48. Rotate Image
- nyoj306-走迷宫(dfs,二分枚举上下界)
- javascript中使用EL表但是一定要注意 符号区别
- docker 配置国内镜像源 linux/mac/windows
- MySQL主键、外键以及子表的删除、更新约束
- JavaScript专精系列(7)——最佳实践篇
- go语言学习-常量
- 8086微处理器介绍
- 异步加载基础
- Java相对路径/绝对路径总结(转)
- 从零基础认识爬虫-简单爬取tripadvisor网站
- 数据结构学习-线性表-顺序表的代码实现
- 练习7