mysql外键约束详解_详解MySQL 外键约束
详解MySQL 外键约束,西欧,西西里,玛雅,兵种,诺曼
详解MySQL 外键约束
易采站长站,站长之家为您整理了详解MySQL 外键约束的相关内容。
官方文档:
https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html
1.外键作用:
MySQL通过外键约束来保证表与表之间的数据的完整性和准确性。
2.外键的使用条件
两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持)
外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以。
3.创建语法
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name, ...)
REFERENCES tbl_name (col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
该语法可以在 CREATE TABLE 和 ALTER TABLE 时使用,如果不指定CONSTRAINT symbol,MYSQL会自动生成一个名字。
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
RESTRICT(限制外表中的外键改动)
CASCADE(跟随外键改动)
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)
CASCADE:表示父表在进行更新和删除时,更新和删除子表相对应的记录
RESTRICT和NO ACTION:限制在子表有关联记录的情况下,父表不能单独进行删除和更新操作
SET NULL:表示父表进行更新和删除的时候,子表的对应字段被设为NULL
4.案例演示
以CASCADE(级联)约束方式
1. 创建势力表(父表)country
create table country (
id int not null,
name varchar(30),
primary key(id)
);
2. 插入记录
insert into country values(1,'西欧');
insert into country values(2,'玛雅');
insert into country values(3,'西西里');
3. 创建兵种表(子表)并建立约束关系
create table solider(
id int not null,
name varchar(30),
country_id int,
primary key(id),
foreign key(country_id) references country(id) on delete cascade on update cascade,
);
4. 参照完整性测试
insert into solider values(1,'西欧见习步兵',1);
#插入成功
insert into solider values(2,'玛雅短矛兵',2);
#插入成功
insert into solider values(3,'西西里诺曼骑士',3)
#插入成功
insert into solider values(4,'法兰西剑士',4);
#插入失败,因为country表中不存在id为4的势力
5. 约束方式测试
insert into solider values(4,'玛雅猛虎勇士',2);
#成功插入
delete from country where id=2;
#会导致solider表中id为2和4的记录同时被删除,因为父表中都不存在这个势力了,那么相对应的兵种自然也就消失了
update country set id=8 where id=1;
#导致solider表中country_id为1的所有记录同时也会被修改为8
以SET NULL约束方式
1. 创建兵种表(子表)并建立约束关系
drop table if exists solider;
create table solider(
id int not null,
name varchar(30),
country_id int,
primary key(id),
foreign key(country_id) references country(id) on delete set null on update set null,
);
2. 参照完整性测试
insert into solider values(1,'西欧见习步兵',1);
#插入成功
insert into solider values(2,'玛雅短矛兵',2);
#插入成功
insert into solider values(3,'西西里诺曼骑士',3)
#插入成功
insert into solider values(4,'法兰西剑士',4);
#插入失败,因为country表中不存在id为4的势力
3. 约束方式测试
insert into solider values(4,'西西里弓箭手',3);
#成功插入
delete from country where id=3;
#会导致solider表中id为3和4的记录被设为NULL
update country set id=8 where id=1;
#导致solider表中country_id为1的所有记录被设为NULL
以NO ACTION 或 RESTRICT方式 (默认)
1. 创建兵种表(子表)并建立约束关系
drop table if exists solider;
create table solider(
id int not null,
name varchar(30),
country_id int,
primary key(id),
foreign key(country_id) references country(id) on delete RESTRICT on update RESTRICT,
);
2. 参照完整性测试
insert into solider values(1,'西欧见习步兵',1);
#插入成功
insert into solider values(2,'玛雅短矛兵',2);
#插入成功
insert into solider values(3,'西西里诺曼骑士',3)
#插入成功
insert into solider values(4,'法兰西剑士',4);
#插入失败,因为country表中不存在id为4的势力
3. 约束方式测试
insert into solider values(4,'西欧骑士',1);
#成功插入
delete from country where id=1;
#发生错误,子表中有关联记录,因此父表中不可删除相对应记录,即兵种表还有属于西欧的兵种,因此不可单独删除父表中的西欧势力
update country set id=8 where id=1;
#错误,子表中有相关记录,因此父表中无法修改
以上就是详解MySQL 外键约束的详细内容,更多关于MySQL 外键约束的资料请关注易采站长站其它相关文章!以上就是关于对详解MySQL 外键约束的详细介绍。欢迎大家对详解MySQL 外键约束内容提出宝贵意见
mysql外键约束详解_详解MySQL 外键约束相关推荐
- mysql数据库约束详解_深入理解mysql数据库的约束
摘要:MYSQL添加约束,删除约束添加列,修改列,删除列 添加主键约束: altertable表名addconstraint主键(形如:PK_表名)primarykey表名(主键字段); 添加外键约束 ...
- mysql分区表详解_详解MySQL分区表
前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...
- mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复
一.开启binlog. 首先查看binlog是否开启 mysql> show variables like "log_bin"; +---------------+----- ...
- mysql命令参数详解_详解Mysql命令大全(推荐)
主要介绍常用的MySQL命令,包括连接数据库,修改密码,管理用户,操作数据库,操作数据表,数据库备份等,每个命令都配有实例说明,让大家更容易理解. 1.连接Mysql 格式: mysql -h主机地址 ...
- mysql联合查询语句详解_实例讲解MySQL联合查询
1. 内联结: Select A.Name, B.Hobby from A, B where A.id = B.id,这是隐式的内联结,查询的结果是: Name Hobby Tim Football ...
- mysql中获取时间的年月日_详解mysql 获取当前日期及格式化
MySQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 ...
- 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)
由于MySQL服务器具有多种安装分发,而且能够运行在多种操作平台之上,因此它的启动与停止的方法也多种多样.你可以根据实际情况使用其中的一种.在你安装.升级或者维护系统时,你可能需要多次启动和终止服务器 ...
- mysql主从复制原理详解_深入研究MySQL(三)、主从复制原理及演示
一.主从复制概述 这章来说说主从复制,对于主从复制,有很多知识,在以后分篇记录,所以在这里只说说简单的用法,用来入个门可以,先说啥是主从复制,主从复制就是将一台主机的数据复制到另一台或者多台主机上,复 ...
- mysql数据库+易语言的应用_易语言mysql数据应用源码
易语言mysql数据应用源码 易语言mysql数据应用源码 系统结构:注册账号,连接Mysql,用户注册验证码,修改密码验证码,忘记密码验证码,修改密码,忘记密码, ======窗口程序集1 | | ...
最新文章
- 无限互联新浪微博项目(视频)分享
- Flex Socket 跨域问题的解决办法
- 对话框中加入标签页的5种方法
- Hibernate 笔记 缓存
- GenericUDTF使用流程记载(转载+自己整理)
- python pip安装pyinstaller报错_pip install pyinstaller (安装过程报错解决)
- React开发(124):ant design学习指南之form中的属性
- leetcode[541]反转字符串II/reverse string II 反转字符串考察对代码的掌控能力
- jenkins根据已打包的镜像,自动生成正式镜像
- 理解Iass Pass SasS三种云服务区别
- 氚云 表单前端代码-提交机制
- 交通标志 | 中美两国警告标志异同分析
- CSS编写格式边框与渐变内容补充
- PostgreSQL安装 弹出Error running
- windows未能启动计算机,电脑开机windows未能启动是怎么回事
- http中各个状态码的含义
- Android程序员需掌握的JVM知识
- 入手评测 华为擎云 L410怎么样
- 课程设计:通讯录系统(数据库)
- day.js插件处理日期
热门文章
- 计算机PS设计策划,计算机ps平面设计课程研究.docx
- iphone手机计算机彩蛋,神奇彩蛋!iPhone 6可用容量从537MB秒变3.3GB
- 史上最全的Python操作 “PPT” 文档大全,以后写“数据分析报告”靠她了!
- 使用 R 和 ggraph 自定义树状图
- 电信业务分类目录_2019年7月国内增值电信业务许可情况分析报告:本期重点介绍内容分发网络业务...
- 广电总局规定:电商直播平台加强内容审核
- 2017微信公开课PRO版在广州召开 张小龙首次全面解读小程序
- python爬虫中requests库和正则表达式之淘宝爬虫实战
- python实现五子棋游戏
- 《腾讯数字生活报告》: 泛娱乐和圈层社交成大趋势