美文网首页
MySQL 外键应用

MySQL 外键应用

作者: _凌浩雨 | 来源:发表于2018-08-21 11:24 被阅读22次
1). MySQL 引擎
show engines;
图1.png

如果InnoDB状态不可用,可参考此文激活.

2). 创建主表
create table parent(id int not null,primary key(id)) engine=innodb;
3). 创建从表
create table child(id int,parent_id int,foreign key (parent_id) references parent(id) on delete cascade) engine=innodb;
4). 主表插入数据
insert into parent values(1),(2),(3);
5). 从表插入数据
insert into child values(1,1),(1,2),(1,3),(1,4);
图2.png
因为主表中不存在4这个数据, 插入时发生了外键约束错误
insert into child values(1,1),(1,2),(1,3);
6). 删除主表数据
delete from parent where id=1;

删除主表记录,从表也将同时删除相应记录.

7). 更新从表外键
update child set parent_id=4 where parent_id=2;

更新child中的外键,如果对应的主键不存在,则报错:


图3.png
update child set parent_id=2 where parent_id=2;

主表中存在的数据则更新成功.

8). 从表数据更新操作

在父表中更新或者删除一行,并且在子表中也有一行或者多行匹配,此时子表的操作有5个选择:

  • CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都可用。在两个表之间,你不应定义若干在父表或子表中的同一列采取动作的ON UPDATE CASCADE子句。
  • SET NULL: 从父表删除或更新行,并设置子表中的外键列为NULL。如果外键列没有指定NOT NULL限定词,这就是唯一合法的。ON DELETE SET NULL和ON UPDATE SET NULL子句被支持。
  • NO ACTION: 在ANSI SQL-92标准中,NO ACTION意味这不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行(Gruber, 掌握SQL, 2000:181)。 InnoDB拒绝对父表的删除或更新操作。
  • RESTRICT: 拒绝对父表的删除或更新操作。NO ACTION和RESTRICT都一样,删除ON DELETE或ON UPDATE子句。(一些数据库系统有延期检查,并且NO ACTION是一个延期检查。在MySQL中,外键约束是被立即检查的,所以NO ACTION和RESTRICT是同样的)。
  • SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

相关文章

  • MySQL 外键应用

    1). MySQL 引擎 如果InnoDB状态不可用,可参考此文激活. 2). 创建主表 3). 创建从表 4)....

  • MySQL 练习笔记 | 杂七杂八

    子查询应用实例 mysql删除包含外键的数据表时会报错: 办法1:先关闭外键,再删除。 若想把id序列也清空到从1...

  • 09_MySQL多表 & JDBC

    MySQL多表 外键 主表主键和从表外键 ==(从表的外键引用主表的主键)== 从表的外键类型必须和主表的主键类型...

  • Mysql外键

    只有InnoDB存储引擎才支持外键 有两张表: 创建外键 方式1: 如上面创建表的语句: 方式2: 删除外键

  • mysql外键

    为已经添加好的数据表添加外键: 语法:alter table 表名 add constraint FK_ID fo...

  • MySQL - 外键

    一、定义 外键约束(FOREIGN KEY Constraint) ,用来维护从表(Child Table)和主表...

  • 设置外键,外键约束值的区别

    laravel 设置外键,并设置外键约束的方式 为联级删除 更新:在使用Navicat for mysql设计表时...

  • laravel 填充数据前用truncate清空有外键的表时报错

    原理就是在执行truncate之前告诉mysql取消所有外键约束检查,清空之后再恢复外键约束检查。 参见: htt...

  • mysql 添加外键约束错误 1215 Cannot add t

    mysql 添加外键约束 1215 Cannot add the foreign key constraint 1...

  • MySQL外键约束

    1、概念 外键:从表中的公共字段称之为外键好处:保证数据库数据的完整性,不会存在数据丢失的情况缺点:对性能有影响,...

网友评论

      本文标题:MySQL 外键应用

      本文链接:https://www.haomeiwen.com/subject/sqpdiftx.html