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. Akka.NET v1.0 已发布,支持Mono
  2. cocos2dx骨骼动画Armature源码分析(一)
  3. 【Codeforces715C&716E】Digit Tree 数学 + 点分治
  4. 原生JS编写的照片墙效果实例演示特效
  5. JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)
  6. 关于nginx的限速模块
  7. monkey(1)
  8. 开源搜索引擎Solr的快速搭建及集成到企业门户最佳实施方案--转载
  9. Windows转到linux中,文件乱码,文件编码转换
  10. Category目录
  11. 64位操作系统下IIS报“试图加载格式不正确的程序”错误
  12. JS滚动条下拉事件
  13. cocos2dx进阶学习之瓦片地图编辑器
  14. PetaPoco 快速上手
  15. 团队作业4——第一次项目冲刺(Alpha版本)4.23
  16. 高仿腾讯QQ最终版
  17. 一个简单的案例带你入门Dubbo分布式框架
  18. CouchBase数据库-一个较新的、发展迅速的nosql数据库技术
  19. 博弈之——SG模板
  20. NPOI导出excel(2.0.6版本)

热门文章

  1. shell脚本 PHP+swoole的安装
  2. (2)Canal管理后台在linux环境上部署
  3. 一个反直觉的sql
  4. [loj574]黄金矿工
  5. [loj3304]作业题
  6. ES6学习 第二章 变量的解构赋值
  7. 论文翻译:2020_Densely connected neural network with dilated convolutions for real-time speech enhancement in the time domain
  8. 爬虫——正则表达式爬取豆瓣电影TOP前250的中英文名
  9. 记一次 .NET 某智能服装智造系统 内存泄漏分析
  10. 面向对象编程之Python学习一