外键
MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。
外键的主要作用是保持数据的一致性、完整性。例如,学生表的主键是 code,成绩表中score 与这个 code 关联。
- 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。
- 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。
选取设置 MySQL 外键约束的字段
定义一个外键时,需要遵守下列规则:
- 父表必须已经存在于数据库中,或者是当前正在创建的表。
- 主键必须是主表所定义定义
- 主键不能包含空值,但允许在外键中出现空值。
- 外键中列的数目必须和父表的主键中列的数目相同。
- 外键中列的数据类型必须和父表主键中对应列的数据类型相同。
在创建表时设置外键约束
在数据表中创建外键使用 FOREIGN KEY 关键字,具体的语法规则如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
主键名定义的外键约束的名称,一个表中不能有相同名称的外键;字段名表示子表需要添加外健约束的字段列;主表名
即被子表外键所依赖的表的名称主键列表示主表中定义的主键列或者列组合。
create table student4(
code int primary key, -- 加主键约束
name varchar(50) not null unique, -- 加非空约束,唯一约束(不能出现重复姓名)
sex char(2) default '男', -- 设置默认值,如果添加记录时该字段没给值,则数据库保存的该默认值
phone char(18),
age int,
enter_time date,
CONSTRAINT chkRowCount CHECK (age between 17 and 22) -- 检查约束
);
-- 主外键约束
create table score1(
score int,
code int,
CONSTRAINT stu_score1_fk FOREIGN KEY (code) REFERENCES student4(code)
);
INSERT INTO student4(CODE,NAME,sex,phone,age,enter_time)
VALUES(1118,'刘强东','男','19887678767',21,now());
INSERT INTO student4
VALUES(1119,'李彦宏','男','15887678767',20,now());
INSERT INTO score1(score,CODE) values(99,1118);
INSERT INTO score1(score,CODE) values(98,1119);
SELECT * FROM student4;
SELECT * FROM score1;
在修改表时添加外键约束
在修改数据表时添加外键约束的语法规则为:
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
与定义外键约束一样,创建一个表,按格式将其约束即可
删除外键约束
对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系,MySQL 中删除外键的语法格式如下:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
具体请读者自行实践