SQL FOREIGN KEY 外键约束

时间:2018-11-15 17:49:02  来源:igfitidea点击:

在本教程中,我们将学习强制在两个表中的数据之间建立链接的外键约束。

外键约束介绍

外键是用于强制两个表中数据之间关系的列或列的组合。包含外键的表称为外键表。

让我们看下面的表:

一个course有零个或多个batch,但是,一个batch必须属于一个course。
这个关系是使用courseid外键列定义的。batches表就称为外键表。

要创建外键,需要使用外键约束。

使用CREATE TABLE语句创建外键约束

下面的查询将使用CREATE TABLE语句创建外键约束:

CREATE TABLE batches (
  batchid INT NOT NULL,
  batchname VARCHAR(255) NOT NULL,
  begindate DATE NOT NULL,
  enddate DATE NOT NULL,
  courseid INT NOT NULL,
  PRIMARY KEY (batchid),
  CONSTRAINT fk_courseid FOREIGN KEY(courseid) 
  REFERENCES courses(courseid)
)

让我们看一下下面的语句:

CONSTRAINT fk_courseid FOREIGN KEY(courseid) REFERENCES courses(courseid)

我们将batches表中的courseid列定义为引用courses表中courseid列的外键。

同时我们为外键约束指定了一个名称(fk_courseid),方便以后使用这个名称来删除约束。
当然,约束的名称fk_courseid是可选的。如果省略它,数据库引擎将为约束生成一个名称。

使用ALTER TABLE语句创建外键约束

如果你想在现有的表中创建外键约束,你可以使用如下的ALTER TABLE语句:

ALTER TABLE fk_tablename
ADD FOREIGN KEY (fk)
REFERENCES ref_tablename(fk)

例如,您可以在batches表中创建一个外键,如下所示:

ALTER TABLE batches 
ADD FOREIGN KEY (courseid)
REFERENCES courses(courseid)

删除外键约束

要删除外键约束,还可以使用以下格式的ALTER TABLE语句:

ALTER TABLE fk_table(表名)
DROP CONSTRAINT constraint_name(外键约束名称)

例如,要删除fk_courseid外键约束,可以使用以下语句:

ALTER TABLE batches
DROP CONSTRAINT fk_courseid