MySQL外键使用详解

 更新时间:2015年03月27日 14:48:04   投稿:hebedich  
两天有人问mysql中如何加外键,今天抽时间总结一下。mysql中MyISAM和InnoDB存储引擎都支持外键(foreign key),但是MyISAM只能支持语法,却不能实际使用。

最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键。

(1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持外键约束

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

(3)外键的作用:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!

(4)建立外键的前提:

两个表必须是InnoDB表类型。
使用在外键关系的域必须为索引型(Index)。
使用在外键关系的域必须与数据类型相似

(5)创建的步骤

指定主键关键字: foreign key(列名)

引用外键关键字: references <外键表名>(外键列名)

(6)事件触发限制:on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

(7)举例

outTable表 主键 id 类型 int

创建含有外键的表:

复制代码 代码如下:

create table temp(
id int,
name char(20),
foreign key(id) references outTable(id) on delete cascade on update cascade);

说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。

复制代码 代码如下:

create table temp( id int, name char(20), foreign key(id) references outTable(id) on delete cascade on update cascade);

缺点:在对MySQL做优化的时候类似查询缓存,索引缓存之类的优化对InnoDB类型的表是不起作用的,还有在数据库整体架构中用得同步复制也是对InnoDB类型的表不生效的,像数据库中核心的表类似商品表请大家尽量不要是使用外键,如果同步肯定要同步商品库的,加上了外键也就没法通不了,优化也对它没作用,岂不得不偿失,做外键的目的在于保证数据完整性,请大家通过程序来实现这个目的而不是外键,切记!

以上所述就是本文的全部内容了,希望大家能够喜欢。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

相关文章

  • MySQL表级锁使用说明

    MySQL表级锁使用说明

    这篇文章主要为大家介绍了MySQL表级锁使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • MySQL中utf8mb4排序规则示例

    MySQL中utf8mb4排序规则示例

    本文主要介绍了MySQL中utf8mb4排序规则,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • MySQL中row_number的实现过程

    MySQL中row_number的实现过程

    这篇文章主要介绍了MySQL中row_number的实现过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • MySQL中MVCC机制的实现原理

    MySQL中MVCC机制的实现原理

    这篇文章主要介绍了MySQL中MVCC机制的实现原理,MVCC多版本并发控制,MySQL中一种并发控制的方法,他主要是为了提高数据库的读写性能,用更好的方式去处理读写冲突
    2022-08-08
  • MySQL免安装版(zip)安装配置详细教程

    MySQL免安装版(zip)安装配置详细教程

    这篇文章主要为大家详细介绍了MySQL免安装版(zip)安装配置详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • mysql中关于覆盖索引的知识点总结

    mysql中关于覆盖索引的知识点总结

    在本篇文章里小编给大家整理的是一篇关于mysql中关于覆盖索引的知识点总结内容,有需要的朋友们学习参考下。
    2020-08-08
  • MySQL分表和分区分表的区别小结

    MySQL分表和分区分表的区别小结

    MySQL分表和分区分表是两种常见的数据分割方案,本文主要介绍了MySQL分表和分区分表的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • mysql的3种分表方案

    mysql的3种分表方案

    这篇文章主要介绍了mysql的3种分表方案,先从为什么要分表说起,然后分析了3种方法的优劣势,最后做了一个总结,需要的朋友可以参考下
    2014-05-05
  • MySQL表和列的注释总结

    MySQL表和列的注释总结

    在本篇文章里小编给大家分享了关于MySQL表和列的注释相关知识点内容总结,需要的朋友们学习下。
    2019-05-05
  • 数据库中笛卡尔积定义、生成与避免策略实践方法

    数据库中笛卡尔积定义、生成与避免策略实践方法

    笛卡尔积是指两个集合中的每个元素都与另一个集合中的每个元素组合形成的所有元素的集合,这篇文章主要给大家介绍了关于数据库中笛卡尔积定义、生成与避免策略实践的相关资料,需要的朋友可以参考下
    2024-05-05

最新评论