MySQL外键约束详解

概念

  • MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。
  • 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。
  • 外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。
  • 两个具有关联关系的表中,主键所在的表叫做主表,外键所在的表叫做从表。
  • 主表和从表可以是同一个表,这样的表称为自参照表,这种结构称为自参照完整性
    B表的外键与A表的主键相对应,则A表为主表,B表为从表。假设学生表(学号,姓名,性别,专业号),专业表(专业号,专业名称),则学生表中的专业号为学生表的外键,其与专业表中“专业号”属性相关联,因此,专业表为主表,学生表为从表。

作用

主要作用是保持数据的一致性、完整性。

外键的选取规则

  • 两个表必须是InnoDB表,MyISAM表暂时不支持外键
  • 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立。
  • 关联关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以。
  • 子表的外键必须关联主表的主键,即必须为主表定义主键。
  • 主表必须已经存在,或者就是当前正在创建的表。
  • 主键不能包含空值,但允许在外键中出现空值。

在创建表时设置外键约束

关键字:FOREIGN KEY
语法规则:

[CONSTRAINT <外键名>] 
FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]

实例:
//tb_dept1表

CREATE TABLE tb_dept1
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50)
);

在这里插入图片描述
//tb_emp6表

CREATE TABLE tb_emp6
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptId INT(11),
salary FLOAT,
CONSTRAINT fk_emp_dept1
FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);

在这里插入图片描述
结果:在表 tb_emp6 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。

在修改表时添加外键约束

语法规则:

ALTER TABLE <数据表名> 
ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) 
REFERENCES <主表名> (<列名>);

删除外键约束

语法规则:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值