MySQL外键使用详解

最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下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类型的表不生效的,像数据库中核心的表类似商品表请大家尽量不要是使用外键,如果同步肯定要同步商品库的,加上了外键也就没法通不了,优化也对它没作用,岂不得不偿失,做外键的目的在于保证数据完整性,请大家通过程序来实现这个目的而不是外键,切记!

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

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

(0)

相关推荐

  • MySQL外键使用及说明详解

    一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立: 3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好处: 可以使得两张表关联,保证

  • 详解MySQL中的外键约束问题

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. MySQL外键约束条件

  • MySQL 关闭子表的外键约束检察方法

    准备: 定义一个教师表.一个学生表:在学生表中引用教师表ID create table teachers(teacherID int not null auto_increment primary key,teacherName varchar(8)); create table students(studentID int not null auto_increment primary key,teacherID int not null,studentName varchar(8), con

  • MySQL删除外键问题小结

    MySQL:MySQL不能删除外键,抱错Error on rename of ./ruler/test2child to ./ruler/#sql2-298-92 (errno: 152) 曾经这是MySQL的一个bug,但是现在只是MySQL的一个不友好的地方. 例子如下: mysql> ALTER TABLE ruler.test2child DROP FOREIGN KEY test; ERROR 1025 : Error on rename of ''./ruler/test2child

  • MySQL外键约束详解

    目录 一.MySQL外键约束作用 二.外键约束创建 (一)创建外键约束的条件 (二)在创建数据表时创建外键约束 (三)在创建数据表后添加外键约束 三.外键约束功能演示 今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL外键约束详解. 一.MySQL外键约束作用 外键约束(Foreign Key)即数据库中两个数据表之间的某个列建立的一种联系.这种联系通常是以实际场景中含义完全相同的字段所造成的.MySQL通过外键约束的引入,可以使得数据表中的数据完整性更强,也更符合显示情况.下面,我

  • MySQL外键使用详解

    最近有开始做一个实验室管理系统,因为分了几个表进行存储·所以要维护表间的关联··研究了一下MySQL的外键. (1)只有InnoDB类型的表才可以使用外键,mysql默认是MyISAM,这种类型不支持外键约束 (2)外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作: (3)外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! (4)建立外键的前提: 两个表必须是InnoDB表类型. 使用在外键关系的域必须为索

  • Mysql关于数据库是否应该使用外键约束详解说明

    一.前言 对于[是否使用外键约束]这个话题已经是老生常谈的了.在学校中,老师交给我们的大多是需要我们建立外键约束,但进入了实际工作很多时候并不会使用外键,而是通过代码逻辑来控制.包括在阿里的JAVA规范中也明确规定:[强制]不得使用外键与级联,一切外键概念必须在应用层解决. 为什么要做这样的规定呢?到底该不该使用外键约束呢?我们可以举一个例子来说明 二.举例说明 现在我们在数据库中建立了两张表:[product和project],[project]的porduct字段,关联Product,他们之

  • MySQL创建数据表并建立主外键关系详解

    前言 为mysql数据表建立主外键需要注意以下几点: 需要建立主外键关系的两个表的存储引擎必须是InnoDB. 外键列和参照列必须具有相似的数据类型,即可以隐式转换的数据类型. 外键列和参照列必须创建索引,如果外键列不存在索引,mysql将自动创建索引. 一.SQL语句创建数据表并设置主外键关系 create table demo.ChineseCharInfo ( ID int not null auto_increment, Hanzi varchar(10) not null, prima

  • MySQL外键约束(Foreign Key)案例详解

    目录 一.MySQL外键约束作用 二.外键约束创建 (一)创建外键约束的条件 (二)在创建数据表时创建外键约束 (三)在创建数据表后添加外键约束 三.外键约束功能演示 总结 今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL外键约束详解. 一.MySQL外键约束作用 外键约束(Foreign Key)即数据库中两个数据表之间的某个列建立的一种联系.这种联系通常是以实际场景中含义完全相同的字段所造成的.MySQL通过外键约束的引入,可以使得数据表中的数据完整性更强,也更符合显示情况.下

  • MySQL外键约束常见操作方法示例【查看、添加、修改、删除】

    本文实例讲述了MySQL外键约束常见操作方法.分享给大家供大家参考,具体如下: 1. 查看数据库表创建的sql语句 show create table vip 2. 查看外键的约束名 CREATE TABLE `vip` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(255) DEFAULT NULL, `code` varchar(255) DEFAULT NULL, `mobile` varchar(255) DEFAUL

  • 详解MySQL 外键约束

    官方文档: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html 1.外键作用: MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 2.外键的使用条件 两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持) 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立: 外键关系的两个表的列必须

  • MySQL 外键(FOREIGN KEY)用法案例详解

    引子:把所有数据都存放于一张表的弊端 表的组织结构复杂不清晰 浪费空间 扩展性极差 为了解决上述的问题,就需要用多张表来存放数据. 表与表的记录之间存在着三种关系:一对多.多对多.一对一的关系. 处理表之间关系问题就会利用到FOREIGN KEY 多对一关系: 寻找表与表之间的关系的套路 举例:雇员表:emp表   部门:dep表 part1: 先站在表emp的角度 去找表emp的多条记录能否对应表dep的一条记录. 翻译2的意义: 左表emp的多条记录==>多个员工 右表dep的一条记录==>

  • mysql外键的三种关系实例详解

    本文实例讲述了mysql外键的三种关系.分享给大家供大家参考,具体如下: 因为有foreign key的约束,使得两张表形成了三种了关系: 多对一 多对多 一对一 一对多或多对一 多对一 create table press( id int primary key auto_increment, name varchar(20) ); create table book( id int primary key auto_increment, name varchar(20), press_id

随机推荐