不理解的地方标注问号。

网上不同的博客讲的,之间似乎有些矛盾,求推荐好书。

写得不好请指出错误。

父表和子表

当两个表建立一对多关系的时候,"一"的那一端是父表,"多"的那一端是子表。

父表设置一个主键

子表设置一个外键

外键与主键相关联

B表引用A表的字段作为外键,那么A表是主表,B表是从表。

举例:

由于选课表中用到了学生表中的学生ID字段(用来与学生表进行关联,获得学生的信息),并且用到了课程表中的课程ID字段(用来与课程表进行关联,获得课程的信息),

通过上面的分析得,选课表是子表,学生表与课程表都是它的父表】

讲解1

MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。InnoDB中外键约束定义的语法如下:

[CONSTRAINT [symbol]] FOREIGN KEY

[index_name] (index_col_name, ...)

REFERENCES tbl_name (index_col_name,...)

[ON DELETE reference_option]

[ON UPDATE reference_option]

reference_option:

RESTRICT | CASCADE | SET NULL | NO ACTION

外键的使用需要满足下列的条件:

两张表必须都是InnoDB表,并且它们没有临时表。

建立外键关系的对应列必须具有相似的InnoDB内部数据类型。

建立外键关系的对应列必须建立了索引。

假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯一的。假如没有显式的给出,InnoDB会自动的创建。

如果子表试图创建一个在父表中不存在的外键值,InnoDB会拒绝任何INSERT或UPDATE操作。

如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。'InnoDB支持5种不同的动作,如果没有指定ON DELETE或者ON UPDATE,默认的动作为RESTRICT:'

CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新子表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。

SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。

NO ACTION: InnoDB拒绝删除或者更新父表。 ?有点不理解

RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。 ?

SET DEFAULT: InnoDB目前不支持。

外键约束使用最多的两种情况无外乎:

1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败;

2)父表更新时子表也更新,父表删除时子表匹配的项也删除。

前一种情况,在外键定义中,我们使用ON UPDATE CASCADE ON DELETE RESTRICT;后一种情况,可以使用ON UPDATE CASCADE ON DELETE CASCADE。

InnoDB允许你使用ALTER TABLE在一个已经存在的表上增加一个新的外键:

ALTER TABLE tbl_name

ADD [CONSTRAINT [symbol]] FOREIGN KEY

[index_name] (index_col_name, ...)

REFERENCES tbl_name (index_col_name,...)

[ON DELETE reference_option]

[ON UPDATE reference_option]

InnoDB也支持使用ALTER TABLE来删除外键:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

讲解

作者:匿名用户

链接:https://www.zhihu.com/questio...

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。

外键的使用条件:

1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);

2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;

3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;

外键的定义语法:

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)

REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

[ON UPDATE {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(无动作,默认的)

mysql外键约束语句级连_mysql之外键约束(级联操作等) 父表子表相关推荐

  1. mysql 外键约束_MySQL之外键约束(FOREIGN KEY)

    定义: MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键. 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每 ...

  2. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  3. 数据库名词解释 主键外键检查 非空、唯一性约束 父表 子表

    Oracle数据库中,约束具体包括非空(NOT NULL)约束.唯一键(UNIQUE)约束.主键(PRIMARY KEY)约束.外键(FOREIGN KEY)约束和检查(CHECK)约束五种. 1:主 ...

  4. mysql当执行delete语句时备份_mysql中,执行delete语句时出现Lock wait timeout exceeded问题...

    问题描述: 当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了.这时我在数据库中删除重复记录时发现该表已经被锁上了.即出现 错误.但过了一会再 ...

  5. mysql 1075_mysql1075错误_1075报错怎么办_mysql主键冲突怎么办 - 树懒学堂

    当我们使用mysql数据库的时候,非常容易遇上mysql1075的报错. 在mysql中1075报错的原因是一个字段设置了自动递增,另外一个字段被设置为主键,发生冲突. 在数据库当中,勾选自动递增的, ...

  6. mysql中约束由数字构成_MySQL 数据类型和约束(外键是重点)

    数据类型 1. 数字(默认都是由符号,宽度表示的是显示宽度,与存储无关).tinyint 括号里指定宽度 七位2进制数最大数就是2**7 -1=127 最小是-128 验证: create tabel ...

  7. mysql添加约束之前不满足_MySQL:添加约束(如果不存在)

    小编典典 有趣的问题.您可能需要在调用CREATE TABLE语句之前禁用外键,然后再启用它们.这将允许您直接在CREATE TABLEDDL中定义外键: 例: SET FOREIGN_KEY_CHE ...

  8. mysql怎么快速删除亿级数据_mysql数据库如何实现亿级数据快速清理

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下: 1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小 看到了吗,光olderdb就占了25G 2. 用SQLy ...

  9. mysql数据库添加数据语句怎么写_mysql中多种插入数据的语句

    摘抄自:https://yjclsx.blog.csdn.net/article/details/83898545 mysql中常用的三种插入数据的语句 insert into表示插入数据,数据库会检 ...

最新文章

  1. pyspider积累
  2. FPGA逻辑设计回顾(3)多比特信号上升沿检测的设计方式与陷阱?
  3. 聊一聊:MyBatis和Spring Data JPA的选择问题
  4. tab in English
  5. GraphPad Prism 统计教程:简单线性回归原理
  6. Django-请求与响应
  7. plsql(轻量版)_游标的使用1
  8. django_mailgun.MailgunAPIError: Response [401]
  9. php 文件加载方式
  10. matlab的7.3版本是什么_乐建工程宝V6.3版本升级说明公告
  11. mmap函数用法及示例程序
  12. 问题集锦13:数据库升级后,程序无法连接数据库
  13. java+测试ip是否通_java 批量测试主机能否ping通
  14. 基础学习 Linux命令
  15. 看雷诺公司如何使用质量工具提高功能安全相关模型软件开发效率
  16. 【Daily】IE弹窗SQL分割字符串
  17. 线程取消(pthread_cancel)
  18. 三角形内切圆 / 外接圆半径计算公式及证明总结 ~
  19. java的程序员工资一般多少_JAVA程序员工资一般是多少
  20. 网页视频倍速播放代码

热门文章

  1. 横空出世,席卷Csdn [评微软等公司数据结构+算法面试100题]
  2. 转,帅气的表格隔行换色+鼠标经过变色、点击变色
  3. COM原理与应用之COM的实现
  4. 存在于实数域的微观粒子7-神经网络与电磁场
  5. vuedraggable示例_vue拖拽列表vuedraggable
  6. 数学符号正三角形△和倒三角形▽的意思
  7. 8.6 多元高斯分布模型-机器学习笔记-斯坦福吴恩达教授
  8. STM32 SPI NSS 引脚为不能拉高问题
  9. IC-工具篇--VCS使用教程-卷二(202004013)
  10. 1、C++招聘笔试--C++中的C