详解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 外键约束相关推荐

  1. mysql数据库约束详解_深入理解mysql数据库的约束

    摘要:MYSQL添加约束,删除约束添加列,修改列,删除列 添加主键约束: altertable表名addconstraint主键(形如:PK_表名)primarykey表名(主键字段); 添加外键约束 ...

  2. mysql分区表详解_详解MySQL分区表

    前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表.但是对于应用程序来讲,分区的表和没有分区的表是一样的.换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理 ...

  3. mysql从挂了数据怎么恢复_详解MySQL误操作后怎样进行数据恢复

    一.开启binlog. 首先查看binlog是否开启 mysql> show variables like "log_bin"; +---------------+----- ...

  4. mysql命令参数详解_详解Mysql命令大全(推荐)

    主要介绍常用的MySQL命令,包括连接数据库,修改密码,管理用户,操作数据库,操作数据表,数据库备份等,每个命令都配有实例说明,让大家更容易理解. 1.连接Mysql 格式: mysql -h主机地址 ...

  5. mysql联合查询语句详解_实例讲解MySQL联合查询

    1. 内联结: Select A.Name, B.Hobby from A, B where A.id = B.id,这是隐式的内联结,查询的结果是: Name Hobby Tim Football ...

  6. mysql中获取时间的年月日_详解mysql 获取当前日期及格式化

    MySQL 获取当前日期及日期格式 获取系统日期: NOW() 格式化日期: DATE_FORMAT(date, format) 注: date:时间字段 format:日期格式 返回系统日期,输出 ...

  7. 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)

    由于MySQL服务器具有多种安装分发,而且能够运行在多种操作平台之上,因此它的启动与停止的方法也多种多样.你可以根据实际情况使用其中的一种.在你安装.升级或者维护系统时,你可能需要多次启动和终止服务器 ...

  8. mysql主从复制原理详解_深入研究MySQL(三)、主从复制原理及演示

    一.主从复制概述 这章来说说主从复制,对于主从复制,有很多知识,在以后分篇记录,所以在这里只说说简单的用法,用来入个门可以,先说啥是主从复制,主从复制就是将一台主机的数据复制到另一台或者多台主机上,复 ...

  9. mysql数据库+易语言的应用_易语言mysql数据应用源码

    易语言mysql数据应用源码 易语言mysql数据应用源码 系统结构:注册账号,连接Mysql,用户注册验证码,修改密码验证码,忘记密码验证码,修改密码,忘记密码, ======窗口程序集1 | | ...

最新文章

  1. 无限互联新浪微博项目(视频)分享
  2. Flex Socket 跨域问题的解决办法
  3. 对话框中加入标签页的5种方法
  4. Hibernate 笔记 缓存
  5. GenericUDTF使用流程记载(转载+自己整理)
  6. python pip安装pyinstaller报错_pip install pyinstaller (安装过程报错解决)
  7. React开发(124):ant design学习指南之form中的属性
  8. leetcode[541]反转字符串II/reverse string II 反转字符串考察对代码的掌控能力
  9. jenkins根据已打包的镜像,自动生成正式镜像
  10. 理解Iass Pass SasS三种云服务区别
  11. 氚云 表单前端代码-提交机制
  12. 交通标志 | 中美两国警告标志异同分析
  13. CSS编写格式边框与渐变内容补充
  14. PostgreSQL安装 弹出Error running
  15. windows未能启动计算机,电脑开机windows未能启动是怎么回事
  16. http中各个状态码的含义
  17. Android程序员需掌握的JVM知识
  18. 入手评测 华为擎云 L410怎么样
  19. 课程设计:通讯录系统(数据库)
  20. day.js插件处理日期

热门文章

  1. 计算机PS设计策划,计算机ps平面设计课程研究.docx
  2. iphone手机计算机彩蛋,神奇彩蛋!iPhone 6可用容量从537MB秒变3.3GB
  3. 史上最全的Python操作 “PPT” 文档大全,以后写“数据分析报告”靠她了!
  4. 使用 R 和 ggraph 自定义树状图
  5. 电信业务分类目录_2019年7月国内增值电信业务许可情况分析报告:本期重点介绍内容分发网络业务...
  6. 广电总局规定:电商直播平台加强内容审核
  7. 2017微信公开课PRO版在广州召开 张小龙首次全面解读小程序
  8. python爬虫中requests库和正则表达式之淘宝爬虫实战
  9. python实现五子棋游戏
  10. 《腾讯数字生活报告》: 泛娱乐和圈层社交成大趋势