sql_外键
⼀、外键的定义
1. 外键是⼀种索引,是通过⼀张表中的⼀列指向另⼀张表的主键,使得这两张表产⽣关联
2. 是某个表中的⼀列,它包含在另⼀个表的主键中
3. ⼀张表中可以有⼀个外键也可以有多个外键
⼆、外键的作⽤
减少单张表的冗余信息
三、使⽤外键后想要删除/更新主表的相关列会报错,因为从表正在使⽤。使⽤外键后若想向从表中插⼊新列,但是外键值主表中没有,会报错,更新从表的外键值,但是值不在从表中会报错。
四、如何创建外键
法1:创建表的时候添加外键
CONSTRAINT 约束名 FOREIGN KEY(字段名) REFERENCES 主表(被引⽤列)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
CASCADE:⽗表delete、update的时候,⼦表会delete、update掉关联记录;
SET NULL:⽗表delete、update的时候,⼦表会将关联记录的外键字段所在列设为null,所以注意在设计⼦表时外键不能设为not null;RESTRICT:如果想要删除⽗表的记录时,⽽在⼦表中有关联该⽗表的记录,则不允许删除⽗表中的记录;
NO ACTION:同 RESTRICT,也是⾸先先检查外键;
其中跟随外键改动是:删除主表中,外键⾏时,从表相关⾏也删除。更新主表中外键相关⾏时,从表
的使⽤⾏也改变foreign key references用法
若,事触发限制为默认值,限制外表中外键的改动,则在添加外键之后对表中数据的增删改查都需要注意
例:
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
sex VARCHAR(255),
age INT);
CREATE TABLE IF NOT EXISTS student_score(
id INT PRIMARY KEY AUTO_INCREMENT,
class VARCHAR(20),
score INT,
student_id INT,
CONSTRAINT fk_s_id FOREIGN KEY(student_id) REFERENCES student(id))
法2:修改表时添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名)
REFERENCES 外表表名(主键字段名)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
例如,1.向从表中插⼊新⾏,但是外键值不在主表中,会报错
#向从表中插⼊新⾏,但是外键值不在主表中,会报错
INSERT INTO student_score(`class`,`student_id`,`score`) VALUES ('语⽂',2,100)
2.
#更新从表外键值,新值不在主表中,会报错
UPDATE student_score SET student_id=2
WHERE student_id=1
3.
#主表想要删除⾏,但是主键值在从表⾥存在,会报错(必须先删除从表使⽤⾏,才能再删主表的相关⾏)--或者采⽤级联删除
DELETE FROM student
WHERE id=1;
#级联删除 on delete cascade
ALTER TABLE student_score DROP FOREIGN KEY fk_s_id;
ALTER TABLE student_score ADD CONSTRAINT fk_s_id FOREIGN KEY(student_id)
REFERENCES student(id) ON DELETE CASCADE
4.
#主表修改主键值,但是旧值在从表中使⽤了,会报错,必须先删除从表的使⽤⾏,才能再修改--或者采⽤级联更新
#级联更新
on update cascadde
UPDATE student SET id = 2 WHERE id = 1;
ALTER TABLE student_score DROP FOREIGN KEY fk_s_id;
ALTER TABLE student_score ADD CONSTRAINT fk_s_id FOREIGN KEY(student_id)
REFERENCES student(id) ON update CASCADE

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。