外键
一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
让我们通过一个实例来解释外键。请看下面两个表:
"teachers" 教师表:

"courses" 课程表:

注意:
"courses" 表中的 "teacher_id" 列指向 "teachers" 表中的 "id" 列。
"teachers" 表中的 "id" 列是 "teachers" 表中的 PRIMARY KEY。
"courses" 表中的 "teacher_id" 列是 "courses" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的行为。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
1 创建表时创建 FOREIGN KEY 约束
下面的 SQL 在 "courses" 表创建时在 "teacher_id" 列上创建 FOREIGN KEY 约束:
MySQL
CREATE TABLE courses
(
id INT NOT NULL,
name VARCHAR(64) NOT NULL,
student_count INT NOT NULL,
created_at DATE NOT NULL,
teacher_id INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (teacher_id) REFERENCES teachers(id)
)
SQL Server/ Oracle/ MS Access
CREATE TABLE courses
(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(64) NOT NULL,
student_count INT NOT NULL,
created_at DATE NOT NULL,
teacher_id INT FOREIGN KEY REFERENCES teachers(id)
)
其中
NOT NULL
表示该字段不为空
REFERENCES
表示引用一个表
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE courses
(
id INT NOT NULL,
name VARCHAR(64) NOT NULL,
student_count INT NOT NULL,
created_at DATE NOT NULL,
teacher_id INT NOT NULL,
PRIMARY KEY (id),
CONSTRAINT fk_teachers FOREIGN KEY (teacher_id) REFERENCES teachers(id)
)
其中
CONSTRAINT
表示约束,后面接约束名称,常用于创建约束和删除约束。
2 创建表后通过 ALTER TABLE 创建 FOREIGN KEY 约束
当 "courses" 表已被创建时,如需在 "course_id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access
ALTER TABLE courses
ADD FOREIGN KEY (teacher_id) REFERENCES teachers(id)
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE courses
ADD CONSTRAINT fk_teachers FOREIGN KEY (teacher_id) REFERENCES teachers(id)
3 撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL
ALTER TABLE courses
DROP FOREIGN KEY fk_teachers
SQL Server / Oracle / MS Access
ALTER TABLE courses
DROP CONSTRAINT fk_teachers
Last updated
Was this helpful?