MySQL 外键用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或多个外键。
外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
外键及其相关名词释义如下:
外键
它是表中的一个字段,虽然可以不是本表的主键,但要对应另外一个表的主键。
外键的作用有两个:
-
第一个作用是保证数据引用的完整性。定义外键后,不允许删除在另一个表中具有关联关系的行。
-
第二个作用是保持数据的一致性、完整性。例如,部门表 tb_dept 的主键是 id,在员工表 tb_emp5 中有一个键 deptId 与这个 id 关联。
主表(父表)
对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。
从表(子表)
对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。
MySQL 创建外键的语法规则如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [ ,字段名2,…]
REFERENCES <主表名> 主键列1 [ ,主键列2,…]
细节说明:
-
“外键名”为定义的外键约束的名称,一个表中不能有相同名称的外键;
-
“字段名”为子表需要添加外键约束的字段列;
-
“主表名”为被子表外键所依赖的表的名称;
-
“主键列”为主表中定义的主键列,或者列组合。
【示例】定义数据表 tb_emp5,并在 tb_emp5 表上创建外键约束。
创建一个部门表 tb_dept1,表结构如表1所示,SQL 语句如下:
CREATE TABLE tb_dept1
(
id INT PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50)
);
表1:tb_dept1 表结构
字段名称 |
数据类型 |
备注 |
id |
INT |
部门编号 |
name |
VARCHAR(22) |
部门名称 |
location |
VARCHAR(50) |
部门位置 |
定义数据表 tb_emp5,让它的字段 deptId 作为外键关联到 tb_dept1 的主键 id,SQL 语句为:
CREATE TABLE tb_emp5
(
id INT PRIMARY KEY,
name VARCHAR(25),
deptId INT,
salary FLOAT,
CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
);
以上语句执行成功之后,在表 tb_emp5 上添加了名称为 fk_emp_dept1 的外键约束,外键名称为 deptId,其依赖于表 tb_dept1 的主键 id。
温馨提示
MySQL 中的关联,指的是在关系型数据库中相关表之间的联系,它是通过相容或相同的属性或属性组来表示的。
子表的外键必须关联父表的主键,且关联字段的数据类型必须匹配,如果类型不一样,则在创建子表时,就会出现错误:
ERROR 1005 (HY000): Can’t create table’database.tablename’(errno:150)
本文链接:http://task.lmcjl.com/news/16747.html