mysql外键策略
1.外键
- 建表时添加外键:constraint 外键名 foreign key 从表字段 references 主表字段 级联操作
create table dage( create table xiaodi(
dage_id int primary key, xiaodi_id int,
name char(10) name char(10),
); dage_id int,
constraint fk foreign key(dage_id) references dage(dage_id));
- 建表后添加外键:alter table 表名 add constraint 外键名 foreign key(字段1) references 表名2(字段名) 级联操作
- 查看:①desc 表名; ②show create table 表名
- 删除:alter table 表名 drop foreign key 外键名
注意:设置了外键的表是从表,它关联的表被称为主表;给从表插入数据时,插入数据必须是主表的被关联字段出现的数据;先建主表再建从表;先删从表再删主表。
2.级联操作
- on delete cascade:主表中的数据被删,从表中相关数据也会被删
- on update cascade:主表中的数据被改后,从表中的相关数据也会被修改
- on delete cascade on update cascade:删除和修改有级联操作
- on delete set null:主表总数据被删除后,从表中相关数据为null
- on update set null
3.示例
一个用户可有拥有多个订单,一个订单只能属于一个用户,一对多,在tb_order中使用外键user_id关联tb_user的id。
当删除、更新tb_user中的主键时,与之关联的tb_order要受到影响,比如
#tb_user中的一条记录 1 chy abcd #tb_order中一条记录,10是tb_order的id,1是所属user的id 10 ...... 1
删除tb_user中id=1这条记录,或者更新id字段的值,mysql会如何处理tb_order中与之关联的记录?

设计外键时,mysql提供了4种外键关联策略
1、RESTRICT 限制(默认策略)
要删除tb_user中的记录,或者更新主键字段的值,如果tb_order中有记录与之关联,则不能删除、更新(执行操作时会报错)
2、CASCADE 级联
删除tb_user中的记录时,会自动删除tb_order中与之关联的记录;
修改tb_user中id字段的值时,会自动修改tb_order中与之关联的记录的外键字段的值(同步变化)。
3、NO ACTION 什么也不做
删除tb_user中的记录,或者修改id字段的值,但tb_order中有记录与之关联,可以删除、更新,tb_order中与之关联的记录不作任何处理(数据不发生变化)。
此种策略需要存储引擎支持,如果存储引擎不支持,会自动换为RESTRICT。
4、SET NULL 置为NULL
删除tb_user的记录,或更新主键字段的值,会自动将tb_order中与之关联的记录的外键字段的值置为NULL。
这种方式有一个要求:设计tb_order时,外键user_id不能使用NOT NULL约束。
CASCADE用得最多,其次是RESTRICT,未设置外键关联策略时默认为RESTRICT(为了数据安全)。
http://www.cppblog.com/wolf/articles/69089.html
mysql外键策略的更多相关文章
- mysql 外键约束备注
梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...
- MySQL外键之级联
简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...
- MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...
- Mysql 外键设置
MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给 ...
- MySQL外键的作用和创建
MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据.使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表 CREATE TABLE `example1` ( ` ...
- Mysql外键的使用
MySQL外键(请确保数据库是innodb类型)网上有很多介绍的文章,这里我就凭自己的理解再次整理了下,废话不多说,直入正题哈.外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据 ...
- mysql 外键和子查询,视图
1.mysql 外键约束 建表时生成外键 foreing key ('sid') references' student'('id'); 建表后添加外键 alter table' course ...
- mysql外键使用和事物使用
mysql外键功能主要是为了保证关联表数据的一致性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存 ...
- Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL
转: Mysql外键设置中的CASCADE.NO ACTION.RESTRICT.SET NULL 2017年06月11日 10:03:13 雅静8 阅读数:5491 版权声明:本文为博主原创文章 ...
随机推荐
- supervisor安装
supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中 ...
- 文件与文件系统的压缩与打包 tar gzip bzip2
1:linux下常见的压缩文件后缀: .gz .zip .bz2 打包后的: .tar.gz .tar.zip .tar.bz2 2:gzip: 压缩:gzip file 解压:gunzip file ...
- appium环境搭建基于安卓(mac系统)
1.需要环境 JDK Python Andriod SDK Node.js Appium Appium-Python-Client Appium-doctor 2.安装jdk(我的版本是1.8) 下载 ...
- yum设置取消代理
unset http_proxy unset https_proxy 暂时取消代理,若永久取消代理,需要修改/etc/yum.conf 去掉 proxy=http://proxyhost:8080
- 7.深入TiDB:range 范围计算优化
本文基于 TiDB release-5.1进行分析,需要用到 Go 1.16以后的版本 我的博客地址:https://www.luozhiyun.com/archives/605 这篇文章首先会回顾一 ...
- .net C# 释放内存 例子
namespace myCommon{ public class SysVar { [DllImport("kernel32.dll")] public ...
- Jquery的常用使用方法
1.获取单个checkbox选中项(三种写法)$("input:checkbox:checked").val()或者$("input:[type='checkbox']: ...
- 测试开发【提测平台】分享14-Vue图标Icon几种用法并利用其一优化菜单
微信搜索[大奇测试开],关注这个坚持分享测试开发干货的家伙. 回归主线更新,由于本次知识点只有一个,就不给思维导图了,在上系列测试平台开发实践中主要学习了页面直接的转跳方法和远程搜索的如何做,最终实现 ...
- Solon 1.5.67 发布,增加 GraalVm Native 支持
Solon 已有120个生态扩展插件,此次更新主要为细节打磨: 添加 solon.extend.graalvm 插件,用于适配 graalvm native image 模式 从此,solon 进入 ...
- dart系列之:dart中的异步编程
目录 简介 为什么要用异步编程 怎么使用 Future 异步异常处理 在同步函数中调用异步函数 总结 简介 熟悉javascript的朋友应该知道,在ES6中引入了await和async的语法,可以方 ...