mysql-参照完整性
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)。
create table student
(
sid int not null primary key,
sname varchar(20)
) engine=innodb;
create table score
(
sid int not null,
mark INT,
constraint score_fk FOREIGN KEY (sid)
references student(sid) on delete cascade on update cascade
) engine=innodb;
在学生表插入一条记录
insert into student values (1,'孙悟空')
在成绩表插入一条记录,学号是1,成功。
insert into score values (1,98)
在成绩表插入一条记录,学号是2,失败。
insert into score values (2,88)
在学生表插入学号是2的一条记录
insert into student values (2,'唐僧')
再在成绩表插入一条学号是2的记录,成功,证明外键参照成功。
insert into score values (2,88);
3、删除参照约束
ALTER TABLE
scoreDROP FOREIGN KEY
score_fk;
4、给现有表增加参照约束
ALTER TABLE
scoreADD CONSTRAINT
score_fk2FOREIGN KEY (
sid) REFERENCES
student(
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 TABLE
scoreDROP FOREIGN KEY
score_fk;
增加score表的sid列外键约束
ALTER TABLE `score` ADD CONSTRAINT `score_fk`
FOREIGN KEY (`sid`) REFERENCES `student` (`sid`)
ON DELETE NO ACTION ON UPDATE NO ACTION;
更新学号是10的学生的学号,失败
update student set sid=11 where sid=10
删除学号是10的学生,失败
delete from student where sid=10
需要先删除该学生成绩表中的记录,再删除该学生。
delete from student where sid=10
delete from score where sid=10;
7、验证级联动作Set NULL
在父表上update/delete记录时,将子表上匹配记录的列设为null ,要注意子表的外键列不能为not null。
删除成绩表的外键约束
ALTER TABLE
scoreDROP FOREIGN KEY
score_fk;
增加成绩表的sid列外键约束,参照动作为set null
ALTER TABLE
scoreADD CONSTRAINT
score_fkFOREIGN KEY (
sid) REFERENCES
student(
sid) ON DELETE SET NULL ON UPDATE SET NULL;
修改成绩表的sid列默认值为NULL
ALTER TABLE `score` MODIFY COLUMN `sid` INTEGER(11) DEFAULT NULL;
insert into student values (1,'孙悟空')
insert into student values (2,'猪八戒')
insert into score values (1,98)
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-参照完整性相关推荐
- mysql 参照完整性规则_MySQL存储引擎你们知道多少?
MySQL存储引擎技术详解点击观看! MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试 ...
- mysql 参照完整性规则_mysql参照完整性
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MYSQL支持数据库的参照完整性约束吗? 有四个表: 表一的主键是的表二外键 表二的主键是表三的外键 表三的主键是表四的外键 请问: 如果:删除表一 表2 ...
- mysql 参照完整性规则_详解mysql数据库审计特点、实现方案及审计插件部署演示...
概述 数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断.它通过对用户访问数据库行为的记录.分 ...
- mysql建立参照完整性,MySQL外键和参照完整性的实现步骤
我们大家都知道MySQL参照完整性一般是通过MySQL外键(foreign key)的具体使用而随之应用.总的来说,流行工具开源 RDBMS MySQL(与PHP搭配之最佳组合)并不支持外键,原因是这 ...
- mysql在学号列创建主码约束_MySQL 数据完整性
数据库实验回顾实体完整性 实体完整性即主码的属性不能为空.而主码就可保证元组是不重复的,即主码值是不能重复的. 参照完整性 参照完整性保证外码的值要么是被参照关系中的主码值,要么取空值. 用户自定义完 ...
- mysql中的参照完整性
本心得并未使用constraint语句,用原始语句方便理解. 接着创建一个课程表,其中包含课程编号,以及课程名字 接着我们再创建一个学生成绩表其中包含学号sno,课程cno,成绩grade.并且建立参 ...
- mysql支持关系模型中哪些完整性约束_数据完整性约束(1)——实体完整性、参照完整性...
一.数据完整性的分类 在关系模型中,提供了实体完整性,参照完整性,用户定义完整性. 二.实体完整性 2.1什么是实体? 实体是一个数据对象,指的是客观存在并可以相互区分的事物,比如学生,老师等.一个实 ...
- MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)
数据完整性的概念 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 实体(行)完整性 实体完整性中的实体指的是表中的行,因为 ...
- mysql实体完整性实现方法_MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)...
数据完整性的概念 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 实体(行)完整性 实体完整性中的实体指的是表中的行,因为 ...
最新文章
- nightwatchjs --Expect element to not include text
- php扩展 zval_copy_ctor,zend api扩展的php对象的autoload工具
- 关于Font Awesome图标的使用
- nbu还原oracle,NBU恢复oracle
- java小编程----电话号码组合
- 倒计时 7 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
- Money-去哪了每日站立会议
- gerrit 数据迁移_gerrit importer 使用方法
- Fragment中添加ListView而不使用ListFragment
- Atitit 声音和音乐检索 多媒体信息检索 信息检索 目录 1.1. 14.4.5 音频基础知识 	1 1.2. 多媒体信息检索的方法主要有哪些?其原理是什么?	1 1.3. 基于文本的检索和基于
- 遇到 no plugin found for prefix 'tomcat 7' in the current project and in the plugin groups 的解决办法
- oracle 聚类索引,carrot2-cluster 使用 实现的读取数据库进行聚类的程序,同时也可以 lucene索引 Oracle 238万源代码下载- www.pudn.com...
- 在Ubuntu系统下进行引导修复
- 英语高考听力测试软件,高考英语听力训练app
- 团队任务2:原型设计与UI设计
- python过去电脑网关不可用怎么办_电脑默认网关不可用怎么解决 Win7系统默认网关不可用终极解决方法...
- 安装VS2008的时候Windows Mobile 5.0 SDK R2 for pocket pc错误解决方案
- c4d安装完 只有语言英文的,为何我将显示语言设置成英文后开始菜单分类还依然显示为中文?...
- WordPress实现关注微信公众号回复关键字获取验证码查看网站隐藏内容
- 向大家推荐一下我的笔记APP『百灵』,里面有丰富的面试资料