在外键约束中,一个表中的列引用另一个表中的主键或唯一约束,以确保数据的一致性。外键约束语法如下:
ALTER TABLE child_table ADD FOREIGN KEY (column_name) REFERENCES parent_table (column_name)
child_table
是引用父表的主键的表。
column_name
是子表中引用父表主键的列。
parent_table
是包含子表引用的主键的表。
ON DELETE 和 ON UPDATE 子句
外键约束还支持 ON DELETE
和 ON UPDATE
子句,用于指定当父表中引用的列发生更改或删除时,子表中的相关数据将如何处理。语法如下:
ALTER TABLE child_table ADD FOREIGN KEY (column_name) REFERENCES parent_table (column_name)
ON DELETE CASCADE
ON UPDATE CASCADE
ON DELETE CASCADE
:如果父表中引用的行被删除,则子表中引用该行的所有行也将被删除。
ON UPDATE CASCADE
:如果父表中引用的行被更新,则子表中引用该行的所有行也将更新。
示例
考虑以下示例:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE courses (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
ALTER TABLE students ADD FOREIGN KEY (course_id) REFERENCES courses (id) ON DELETE CASCADE;
在这个示例中,students
表的 course_id
列引用 courses
表的主键 id
。如果 courses
表中任何引用的课程被删除,则 students
表中引用该课程的所有学生记录也将被删除。
优点
外键约束提供以下优点:
**数据完整性:**确保子表中的数据与父表中的数据一致,防止出现孤立或无效的行。
**级联更新和删除:**当父表中的数据发生更改时,自动更新或删除子表中的相关数据,简化数据维护。
**数据库结构检查:**有助于验证数据库结构的一致性,防止引用不存在或无效的表或列。