MySQL参照完整性一般是通过MySQL外键(foreign key)实现的。
外键(仅innoDB支持)所引用表的列必须是主键。
外键声明包括三个部分:
A、哪个列或列组合是外键
B、指定外键参照的表和列
C、参照动作[cascade(级联操作),restrict(拒绝操作),set null(设为空),no action,set default]。
如果外键约束指定了参照动作,主表记录做修改,删除,从表引用的列会做相应修改,或不修改,拒绝修改或设置为默认值。
引用表的列名必须是主键,且在删除引用表时必须删除引用关系或者删除当前表。

2、创建表时指定外键

创建两张表,学生表student和成绩表score,成绩表的sid列的取值参照学生表(学生表student的sid列设置为主键,且表的存储引擎为innodb,成绩表score的存储引擎也必须设置为innodb)。

  1. create table student

  2. (

  3. sid int not null primary key,

  4. sname varchar(20)

  5. ) engine=innodb;

  6. create table score

  7. (

  8. sid int not null,

  9. mark INT,

  10. constraint score_fk FOREIGN KEY (sid)

  11. references student(sid) on delete cascade on update cascade

  12. ) engine=innodb;

  13. 在学生表插入一条记录

  14. insert into student values (1,'孙悟空')

  15. 在成绩表插入一条记录,学号是1,成功。

  16. insert into score values (1,98)

  17. 在成绩表插入一条记录,学号是2,失败。

  18. insert into score values (2,88)

  19. 在学生表插入学号是2的一条记录

  20. insert into student values (2,'唐僧')

  21. 再在成绩表插入一条学号是2的记录,成功,证明外键参照成功。

  22. insert into score values (2,88);

3、删除参照约束

ALTER TABLEscoreDROP FOREIGN KEYscore_fk;

4、给现有表增加参照约束

ALTER TABLEscoreADD CONSTRAINTscore_fk2FOREIGN KEY (sid) REFERENCESstudent(sid);

5、验证级联动作删除和更新

在score表创建的参照完整性,删除动作和更新动作的参照动作选择了cascade(级联操作),当学生表的sid更新时,分数表score的相应的sid也会更新,当学生被删除,分数表对应的sid的记录也会自动删除。
更新学生表学号是1的学生的学号为10
update student set sid=10 where sid=1
查看成绩表,可以看到以前学号是1的已经变成了10
select * from score
删除学生表学号是2的学生
delete from student where sid=2
可以看到成绩表,该学生的成绩已经级联删除
select * from score

6、验证级联动作No Aaction

级联动作设置为NO ACTION,如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作。
Restrict动作同no action,都是立即检查外键约束。
将参照动作设置为no action,如果成绩表score有该学生sid,将不能更改学生表student表的学生sid列,也不能删除该学生。除非你先删除该学生的成绩,再删除该学生。
删除score表的外键约束
ALTER TABLEscoreDROP FOREIGN KEYscore_fk;
增加score表的sid列外键约束

  1. ALTER TABLE `score` ADD CONSTRAINT `score_fk`

  2. FOREIGN KEY (`sid`) REFERENCES `student` (`sid`)

  3. ON DELETE NO ACTION ON UPDATE NO ACTION;

更新学号是10的学生的学号,失败
update student set sid=11 where sid=10
删除学号是10的学生,失败
delete from student where sid=10
需要先删除该学生成绩表中的记录,再删除该学生。

  1. delete from student where sid=10

  2. delete from score where sid=10;

7、验证级联动作Set NULL

在父表上update/delete记录时,将子表上匹配记录的列设为null ,要注意子表的外键列不能为not null。
删除成绩表的外键约束
ALTER TABLEscoreDROP FOREIGN KEYscore_fk;
增加成绩表的sid列外键约束,参照动作为set null
ALTER TABLEscoreADD CONSTRAINTscore_fkFOREIGN KEY (sid) REFERENCESstudent(sid) ON DELETE SET NULL ON UPDATE SET NULL;
修改成绩表的sid列默认值为NULL

  1. ALTER TABLE `score` MODIFY COLUMN `sid` INTEGER(11) DEFAULT NULL;

  2. insert into student values (1,'孙悟空')

  3. insert into student values (2,'猪八戒')

  4. insert into score values (1,98)

  5. insert into score values (2,88)

删除学生表中学号1的学生
delete from student where sid=1
查看成绩表,成绩表中学号为1的列为NULL
select * from score

转自 :http://blog.51cto.com/9291927/2093934 MySQL数据库高级(一)——数据完整性

mysql-参照完整性相关推荐

  1. mysql 参照完整性规则_MySQL存储引擎你们知道多少?

    MySQL存储引擎技术详解点击观看! MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试 ...

  2. mysql 参照完整性规则_mysql参照完整性

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MYSQL支持数据库的参照完整性约束吗? 有四个表: 表一的主键是的表二外键 表二的主键是表三的外键 表三的主键是表四的外键 请问: 如果:删除表一 表2 ...

  3. mysql 参照完整性规则_详解mysql数据库审计特点、实现方案及审计插件部署演示...

    概述 数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断.它通过对用户访问数据库行为的记录.分 ...

  4. mysql建立参照完整性,MySQL外键和参照完整性的实现步骤

    我们大家都知道MySQL参照完整性一般是通过MySQL外键(foreign key)的具体使用而随之应用.总的来说,流行工具开源 RDBMS MySQL(与PHP搭配之最佳组合)并不支持外键,原因是这 ...

  5. mysql在学号列创建主码约束_MySQL 数据完整性

    数据库实验回顾实体完整性 实体完整性即主码的属性不能为空.而主码就可保证元组是不重复的,即主码值是不能重复的. 参照完整性 参照完整性保证外码的值要么是被参照关系中的主码值,要么取空值. 用户自定义完 ...

  6. mysql中的参照完整性

    本心得并未使用constraint语句,用原始语句方便理解. 接着创建一个课程表,其中包含课程编号,以及课程名字 接着我们再创建一个学生成绩表其中包含学号sno,课程cno,成绩grade.并且建立参 ...

  7. mysql支持关系模型中哪些完整性约束_数据完整性约束(1)——实体完整性、参照完整性...

    一.数据完整性的分类 在关系模型中,提供了实体完整性,参照完整性,用户定义完整性. 二.实体完整性 2.1什么是实体? 实体是一个数据对象,指的是客观存在并可以相互区分的事物,比如学生,老师等.一个实 ...

  8. MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)

    数据完整性的概念 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 实体(行)完整性 实体完整性中的实体指的是表中的行,因为 ...

  9. mysql实体完整性实现方法_MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)...

    数据完整性的概念 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 实体(行)完整性 实体完整性中的实体指的是表中的行,因为 ...

最新文章

  1. nightwatchjs --Expect element to not include text
  2. php扩展 zval_copy_ctor,zend api扩展的php对象的autoload工具
  3. 关于Font Awesome图标的使用
  4. nbu还原oracle,NBU恢复oracle
  5. java小编程----电话号码组合
  6. 倒计时 7 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
  7. Money-去哪了每日站立会议
  8. gerrit 数据迁移_gerrit importer 使用方法
  9. Fragment中添加ListView而不使用ListFragment
  10. Atitit 声音和音乐检索 多媒体信息检索 信息检索 目录 1.1. 14.4.5 音频基础知识 1 1.2. 多媒体信息检索的方法主要有哪些?其原理是什么? 1 1.3. 基于文本的检索和基于
  11. 遇到 no plugin found for prefix 'tomcat 7' in the current project and in the plugin groups 的解决办法
  12. oracle 聚类索引,carrot2-cluster 使用 实现的读取数据库进行聚类的程序,同时也可以 lucene索引 Oracle 238万源代码下载- www.pudn.com...
  13. 在Ubuntu系统下进行引导修复
  14. 英语高考听力测试软件,高考英语听力训练app
  15. 团队任务2:原型设计与UI设计
  16. python过去电脑网关不可用怎么办_电脑默认网关不可用怎么解决 Win7系统默认网关不可用终极解决方法...
  17. 安装VS2008的时候Windows Mobile 5.0 SDK R2 for pocket pc错误解决方案
  18. c4d安装完 只有语言英文的,为何我将显示语言设置成英文后开始菜单分类还依然显示为中文?...
  19. WordPress实现关注微信公众号回复关键字获取验证码查看网站隐藏内容
  20. 向大家推荐一下我的笔记APP『百灵』,里面有丰富的面试资料

热门文章

  1. 游戏学院改变了谁的命运?
  2. 婚恋交友网站大量吸引风险投资
  3. 羊了个羊1.0(第一关)
  4. 看这家大型国有企业的如何寻找与突破数字化?实现利益新的增长点
  5. Linux -- echo
  6. iOS之引用外部字体
  7. html5动画 banner 制作工具
  8. Redis学习_2_数据类型_2_hash
  9. 《淘宝网开店 SEO 推广 营销 爆款 实战200招》——1.7 网店推广的误区
  10. wireshark 抓包工具