一、外键的作用:
外键的主要作用是保证数据的一致性和完整性,并且减少数据冗余。主要体现在以下两个方面:
1、阻止执行
从表插入新行,其外键值不是主表的主键值便阻止插入。
从表修改外键值,新值不是主表的主键值便阻止修改。
主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行)。
主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。
2、级联执行
主表删除行,连带从表的相关行一起删除。
主表修改主键值,连带从表相关行的外键值一起修改。
二、如何添加外键?
1、使用navicate可视化工具
2、使用sql语句创建外键
第一种:创建表时直接创建外键
create table teacher(
id int unsigned auto_increment,
name varchar(20),
primary key (id)
);
create table student(
id int unsigned auto_increment,
name varchar(20),
gender enum('男','女','保密'),
tid int unsigned,
primary key (id),
constraint stfk foreign key(tid)references teacher(id)
);
第二种:创建表后再添加外键
语法:
其中,ON DELETE 和 ON UPDATE 表示事件触发限制
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}]
# 参数 意义
RESTRICT 限制外表中的外键改动(默认值,也是最安全的设置)
CASCADE 跟随外键改动
SET NULL 设为null值
NO ACTION 无动作
SET DEFAULT 设为默认值
示例:
# 先创建两张表,表引擎为 InnoDB
CREATE TABLE student
(
id int (11) primary key auto_increment,name char(255),sex char(255),age int(11)
) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE student_score
(
id int (11) primary key auto_increment,class char(255),score char(255),student_id int(11)
) Engine = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
# 创建外键
ALTER TABLE student_score ADD CONSTRAINT s_id FOREIGN KEY(student_id) REFERENCES student(id);
ALTER TABLE student_score ADD CONSTRAINT s_id FOREIGN KEY (student_id) REFERENCES student (id) ON DELETE CASCADE ON UPDATE CASCADE;
# 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
ALTER TABLE student_score DROP FOREIGN KEY s_id;
标签:SET,数据库,外键,键值,student,MySQL,TABLE,id From: https://www.cnblogs.com/dongfangzhaoyue/p/17453404.html