文档章节

MySQL外键约束方式

zyt_1978
 zyt_1978
发布于 2016/09/23 17:29
字数 787
阅读 8
收藏 0

MySQL外键约束方式

 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。这里以MySQL为例,总结一下3种外键约束方式的区别和联系。   www.2cto.com       这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。      首先创建用户组表: 创建用户组表 create table t_group ( id int not null, name varchar(30), primary key (id) ); 并插入两条记录: 插入记录 insert into t_group values (1, 'Group1'); insert into t_group values (2, 'Group2');  下面创建用户表,分别以不同的约束方式创建外键引用关系: 1、级联(cascade)方式 级联方式 create table t_user ( id int not null, name varchar(30), groupid int, primary key (id), foreign key (groupid) references t_group(id) on delete cascade on update cascade );   参照完整性测试 insert into t_user values (1, 'qianxin', 1); #可以插入 insert into t_user values (2, 'yiyu', 2);    #可以插入 insert into t_user values (3, 'dai', 3);    #错误,无法插入,用户组3不存在,与参照完整性约束不符   约束方式测试 insert into t_user values (1, 'qianxin', 1); insert into t_user values (2, 'yiyu', 2); insert into t_user values (3, 'dai', 2); delete from t_group where id=2;              #导致t_user中的2、3记录级联删除 update t_group set id=2 where id=1;          #导致t_user中的1记录的groupid级联修改为2  2、置空(set null)方式 置空方式 create table t_user ( id int not null, name varchar(30), groupid int, primary key (id), foreign key (groupid) references t_group(id) on delete set null on update set null );  参照完整性测试insert into t_user values (1, 'qianxin', 1); #可以插入 insert into t_user values (2, 'yiyu', 2);    #可以插入 insert into t_user values (3, 'dai', 3);     #错误,无法插入,用户组3不存在,与参照完整性约束不符  约束方式测试 insert into t_user values (1, 'qianxin', 1); insert into t_user values (2, 'yiyu', 2); insert into t_user values (3, 'dai', 2); delete from t_group where id=2;              #导致t_user中的2、3记录的groupid被设置为NULL update t_group set id=2 where id=1;          #导致t_user中的1记录的groupid被设置为NULL   3、禁止(no action / restrict)方式 禁止方式 create table t_user ( id int not null, name varchar(30), groupid int, primary key (id), foreign key (groupid) references t_group(id) on delete no action on update no action );  参照完整性测试 insert into t_user values (1, 'qianxin', 1); #可以插入 insert into t_user values (2, 'yiyu', 2);    #可以插入 insert into t_user values (3, 'dai', 3);     #错误,无法插入,用户组3不存在,与参照完整性约束不符  约束方式测试 insert into t_user values (1, 'qianxin', 1); insert into t_user values (2, 'yiyu', 2); insert into t_user values (3, 'dai', 2); delete from t_group where id=2;              #错误,从表中有相关引用,因此主表中无法删除 update t_group set id=2 where id=1;          #错误,从表中有相关引用,因此主表中无法修改  

注:在MySQL中,restrict方式与no action方式作用相同。 

本文转载自:http://www.2cto.com/database/201302/190165.html

zyt_1978
粉丝 8
博文 166
码字总数 21058
作品 0
程序员
私信 提问
错误:mysql foreign key errno 150

Mysql错误:ERROR 1005 (HY000): Can't create table 'mytable.#sql-191_1c5e4' (errno: 150) alter table message_demo add constraint foreign key(type) references message_type(id) on......

cwalet
2011/11/25
0
0
MySQL学习笔记一

MySQL目录结构 配置my.ini MySQL5.7的my.ini位于ProgramDataMySQLMySQL Server 5.7目录下(可能有的版本的my.ini就在安装目录下),该该目录下还有一个data目录存放我们的创建的数据库。 打开...

Aaron_DMC
2016/12/16
27
0
补12.关于mysql的外键约束

一、什么是mysql中的外键(froeign key) 假如说有两张表,其中一张表的某个字段指向了另一张表的主键,这就可以称之为外键(froeign key)。 在子表中增加一条记录时,需要确定是否有与父表相...

苏浩智
2017/06/06
0
0
6、MySQL字段约束介绍

6、MySQL字段约束 上一章简要介绍了关于MySQL关于多表查询的相关操作介绍,本章内容将在创建数据表的时候关于定义的相关字段进行约束操作。 一、字段字段修饰符的使用 1.1 null和not null修饰...

CARYFLASH
2017/11/20
0
0
「MySQL」MySQL数据库及表基础操作

一、数据库操作 - 创建数据库 先通过命令查看现有数据库,结果如下: 创建一个新的数据库,命令如下: 再次查看数据库结果如下: 可以发现成功创建了数据库。 也可以查看单个数据库信息,命令...

陌问MW
2018/10/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部