外键

一:首先是外键的定义

   如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,则该属性集称为是关系模式R1的外键。

二:主键表和外键表的理解

(1)以公共关键字作主键的表为主键表(父表,主表)

(2)以公共关键字作外键的表为外键表(从表,外表)

外键的作用:保证数据的完整性和一致性。

主键、外键和索引的区别

CASCADE:级联

什么是级联操作:
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
ON UPDATE CASCADE – 级联更新,主键发生更新时,外键也会更新
ON DELETE CASCADE – 级联删除,主键发生删除时,外键也会删除

(1)所谓的级联删除,就是删除主键表的同时,外键表同时删除。
(2)删除主键表时必须删除其他与之关联的表,这里就说明了外键的作用,保持数据的一致性、完整性。当然反过来讲,你删除关联表中的记录,并不影响主键表中的数据,你查询主键表也能正确查询。所以删除外键表中的数据并不影响主键表。

NO ACTION(非活动,默认)、RESTRICT:约束/限制

当取值为No Action或者Restrict时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表)

SET NULL

当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(一样是外键表约束主键表,不过这就要求该外键允许取null)。

NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

数据库-MySQL-数据库设计-外键相关推荐

  1. mysql一对一外键约束_MySQL数据库之-foreign key 外键(一对多、多对多、一对一)、修改表、复制表...

    我们在同一数据库创建的表时候,很多时候会出现相同数据的冗余问题,也就是说几个id会有一个或者同n个相同字段,这样就导致数据表结构数据重复冗余, 冗余还无所谓,关键是如果我要改其中一个相同的字段信息,其 ...

  2. 为什么数据库不应该使用外键

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  3. 为什么数据库不应该使用外键?

    当我们想要持久化地存储数据时,使用关系型数据库往往都是最稳妥的选择,这不仅因为今天的关系型数据库种类非常丰富并且稳定,还因为不同社区对关系型数据库的支持都非常完备. 我们在前面的文章中曾经分析过 为什 ...

  4. 实际开发中,是否会在数据库表中设置外键?

    本科学习数据库的时候,书上明确的写了对于多对多关系必须要创建外键,可是最近在跟师兄做一个B/S架构的项目,发现所设计的数据库表虽然是多对多关系但并没有要求外键,查了一下之后才发现目前的大型系统中(尤其 ...

  5. 数据库建表需要外键约束?

    数据库建表需要外键约束吗? 数据库建表时一定要设置外键约束关系吗?

  6. Mysql无法创建外键的原因

    在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

  7. mysql setnull_1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用...

    在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

  8. oracle+cascade=gt;true,mysql数据库主外键级联删除脚本RESTRICT -- CASCADE

    在项目中,我们一般在数据库设计的时候做主外键关联设计,要么就不做.但是这样不符合规范,呵呵. 建立主外键关系的时候,默认是不能级联删除的.而出现往往在删除主表的数据时报错, 需要先删除从表然后再删除主 ...

  9. mysql不能删除外键吗,MySQL不能删除外键约束所需的索引

    MySQL不能删除外键约束所需的索引 我需要改变现有的数据库添加一列. 因此我也想更新UNIQUE字段来包含这个新列. 我试图删除当前的索引,但不断收到错误MySQL Cannot drop inde ...

  10. mysql删除表外键_MySQL删除所有表的外键约束、禁用外键约束

    数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能.在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加可读性,会创建表与表之间的关联关 ...

最新文章

  1. OpenCV——图像的平移旋转
  2. Java项目:家庭理财系统(java+SSM+JSP+Tomcat8+Mysql)
  3. python小课堂28_python学习28——课后练习
  4. 鼠标位置精确定位总结
  5. 学习笔记100—强制免费下载 百度文库等网站上文档 以及客道巴巴文档 教程
  6. typedef enum的用法(枚举)
  7. JAVA_WEB--jsp语法
  8. 洛谷——P1033 自由落体
  9. 【前端】数字媒体技术专业主要课程及就业方向
  10. asp.net onclick与onclientclick的区别
  11. RocketMQ源码-基于Netty的通信层设计
  12. 网页版查询mysql数据_网页查询数据库 数据库查询
  13. Windows 技术篇-cmd命令查看系统启动时间、操作系统信息、内存使用情况、电脑配置信息
  14. 苹果4.3该如何避免?机审人审怎么过?
  15. html制作qq会员页面,QQ会员页面导航.html
  16. 法大大连续两年中国电子签名市场份额第一
  17. matlab 2015 积分,Matlab中如何求解积分?
  18. 职场工作细节提升建议
  19. 2019.02.24
  20. PHPStorm 显示自动换行

热门文章

  1. 双向链表的C++类模板实现
  2. linux gtk python,python-Linux上具有pygtk(gtk.gdk)的桌面/根窗口上的键盘/鼠标事件
  3. 产品壁垒_打破人员,流程和产品之间的壁垒
  4. linux作为生产力工具_适用于Linux的顶级音乐播放器,可保护隐私的社交媒体替代品,打印技巧,生产力工具等
  5. ansible 并发设置_如何使用Ansible通过Prometheus设置系统监视
  6. 年度总结 | 小小的年度大总结!太精辟!
  7. Bootstrap列表组堆叠
  8. Bootstrap固定导航条
  9. Bootstrap3 行内表单
  10. SLAM Cartographer(18)后端优化问题求解器