sql外键需要输入吗_创建外键 (SQL)

在下例中,将创建一个名为 Skills 的表,其中列出可能有的技能,然后创建一个与 Skills 表具有外键关系且名为 EmployeeSkills 的表。请注意,EmployeeSkills.SkillID 与 Skills 表的主键列 (Id)

存在外键关系。

CREATE TABLE Skills (

Id INTEGER PRIMARY KEY,

SkillName CHAR(40),

Description CHAR(100)

);

CREATE TABLE EmployeeSkills (

EmployeeID INTEGER NOT NULL,

SkillID INTEGER NOT NULL,

SkillLevel INTEGER NOT NULL,

PRIMARY KEY( EmployeeID ),

FOREIGN KEY (SkillID) REFERENCES Skills ( Id )

);

您也可以在创建完表后使用 ALTER TABLE 语句将外键添加到该表。在下例中,将创建与上例中类似的表,唯一不同之处是在创建表后再添加外键。

CREATE TABLE Skills2 (

ID INTEGER PRIMARY KEY,

SkillName CHAR(40),

Description CHAR(100)

);

CREATE TABLE EmployeeSkills2 (

EmployeeID INTEGER NOT NULL,

SkillID INTEGER NOT NULL,

SkillLevel INTEGER NOT NULL,

PRIMARY KEY( EmployeeID ),

);

ALTER TABLE EmployeeSkills2

ADD FOREIGN KEY SkillFK ( SkillID )

REFERENCES Skills2 ( ID );

可以在创建外键时指定外键的属性。例如,以下语句将创建与示例 2 中相同的外键,但它将外键定义为 NOT NULL,同时定义更新或删除数据时的限制。

ALTER TABLE Skills2

ADD NOT NULL FOREIGN KEY SkillFK ( SkillID )

REFERENCES Skills2 ( ID )

ON UPDATE RESTRICT

ON DELETE RESTRICT;

外键列名和主键列名将根据在两个列表中的位置进行一对一式的配对。如果在定义外键时未指定主表列名,则使用主键列。例如,假设按如下方式创建两个表:

CREATE TABLE Table1( a INT, b INT, c INT, PRIMARY KEY ( a, b ) );

CREATE TABLE Table2( x INT, y INT, z INT, PRIMARY KEY ( x, y ) );

然后,按如下方式创建外键 fk1,明确指定如何对两个表之间的列进行配对:

ALTER TABLE Table2 ADD FOREIGN KEY fk1( x,y ) REFERENCES Table1( a, b );

使用下面的语句创建第二个外键 fk2,仅指定外表列。数据库服务器会自动将这两个列与主表主键中的前两列配对。

ALTER TABLE Table2 ADD FOREIGN KEY fk2( x, y ) REFERENCES Table1;

使用下面的语句创建外键,不指定主表或外表的列:

ALTER TABLE Table2 ADD FOREIGN KEY fk3 REFERENCES Table1;

由于没有指定引用列,数据库服务器会在外表 (Table2) 中查找与主表 (Table1) 中的列同名的列。如果存在,数据库服务器会确保数据类型匹配,然后使用这些列创建外键。否则,将在 Table2 中创建这些列。在此示例中,Table2 没有 名为 a 和 b 的列,因此将创建这两个列且数据类型与 Table1.a 和 Table1.b 相同。这些自动创建的列不会成为外表主键的一部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值