最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下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外键使用详解相关推荐

  1. MySQL安装详细教程(小白式安装详解)

    MySQL安装详细教程(小白式安装详解) 1.下载地址 1.1地址 https://dev.mysql.com/downloads/mysql/ 下载链接 1.2下载版本 2.安装配置 2.1路径(路 ...

  2. mysql心得体会一百字_MYSQL CPU 100%实例详解

    MYSQL CPU 100%实例详解 2011/7/2 11:19:19作者:xy我要评论(0) 自己的一台主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL ...

  3. mysql 执行计划 代价_mysql explain执行计划详解

    1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 2).select_type列常见的有: A:simple:表 ...

  4. mysql数据库数字类型_Mysql 数据库数值类型详解

    MySQL 支持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER.SMALLINT.DECIMAL 和NUMERIC),以及近似数值数据类型(FLOAT.REAL 和DOUBLE P ...

  5. mysql高可用架构_mysql高可用架构详解

    高可用(High Availabiltity)应用提供持续不间断(可用)的服务的能力 系统高可用性的评价通常用可用率表示 造成不可用的原因硬件故障(各种) 预期中的系统软硬件维护 软件缺陷(应用代码, ...

  6. mysql查询解析过程_MySQL查询执行过程详解

    查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览.查询是一个独立的.功能强大的.具有计算功能和条件检索功能的数据库对象.MySQL数据库中,MySQL ...

  7. mysql中数字格式化_mysql中格式化数字详解

    最近因为工作的需求,需要对mysql中数字进行格式化,但发现网上的资料较少,索性自己总结一下,方便自己也帮助有需要的朋友们,下面话不多说,来一起看看详细的介绍: 一.format函数: 格式化浮点数 ...

  8. mysql show full processlist;_mysql show full processlist 详解

    Checking table 正在检查数据表(这是自动的). Closing tables 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表.这是一个很快的操作,如果不是这样的话,就应该确认 ...

  9. mysql数据库导入导出_MySQL数据库导入导出详解

    MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导入:2) 直接拷贝数据库目录和文件.在不同操作系统或MySQL版本情况 1. 概述 MySQL数据库的导入,有两种方法: 1) 先 ...

最新文章

  1. 看博客学学Android(十三)
  2. linux权限管理详解,linux权限管理详解-Go语言中文社区
  3. oracle ebs hr模块表,oracle ebs常用表结构及分类模块.doc
  4. 5v 3.3v电平转换电路_MOS管电平转换电路,硬件工程师居家旅行、看门护院的必备良药...
  5. 小米平板android版本,小米平板2发布:分Android和Wind 10两个版本
  6. 【nodejs学习】0.nodejs学习第一天
  7. mysql 查看3306端口_如何查看端口(3306)被那个程序占用?
  8. 虚拟服务器怎么搭建php,怎样搭建Apache+MySQL+PHP服务器
  9. redis的持久化(RDBAOF的区别)
  10. multiprocessing.queue取数据要加锁么_秒杀抢购思路以及高并发下数据安全
  11. qt 部署 错误_Qt 5.9 安装过程报错现象及解决方案
  12. C语言中char字符为0时的情况
  13. 编程向未来---启程
  14. IDEA绝对好用的十大插件,不接受反驳
  15. java poi word换行符_poi读取word的换行符问题
  16. 微信小程序getUserInfo无法获取用户信息
  17. 在html中控制自动换行 1
  18. android+动态设置权重,Android自适应布局(关于权重weight的使用技巧!)
  19. 利用python爬取某直播网站实时弹幕并分析
  20. vue-cli3.0移动端使用的轮播插件

热门文章

  1. 求助:谁可以给我点share point 开发的资料
  2. 什么是 BCH、比特现金新地址?
  3. 点击按钮出现水波纹动画
  4. 装了虚拟机,但是没有虚拟网卡vmnet0 vmnet1 vmnet8
  5. 该怎样才能将PDF转换成HTML
  6. CSS知识点——可替换元素vs不可替换元素
  7. windows2003server下能安装的MSN
  8. Andrew Ng 深度学习课后测试记录-01-week2-答案
  9. python如何帮我在投资中获取更高收益
  10. IIS的应用程序池优化方法