【发布时间】:2017-06-21 06:41:26
【问题描述】:
我开始在一个新项目中工作,我用 C# 编写程序并使用 SQL 服务器。 数据库开始变得有点复杂,但没什么好担心的,但昨天我在 Stack Overflow 的某个地方发现了一种关联表的新方法。
表 A
CREATE TABLE tableA (
Id int NOT NULL IDENTITY(1,1),
name varchar(50),
CONSTRAINT tablea_pk PRIMARY KEY (Id))
表 B
CREATE TABLE tableB (
Id int NOT NULL IDENTITY(1,1),
name varchar(50),
idA int NOT NULL REFERENCES TableA(Id) ON DELETE CASCADE,
CONSTRAINT tableB_pk PRIMARY KEY (Id))
表 C
CREATE TABLE tableC (
Id int NOT NULL IDENTITY(1,1),
name varchar(50),
idB int NOT NULL,
CONSTRAINT tableC_fk_tableB FOREIGN KEY(idB)
REFERENCES tableB(Id)
ON DELETE CASCADE)
我怀疑创建引用的两种方式完全相同,唯一的区别是当您在表 B 中创建引用时,您没有为外键指定约束名称,因此外键的名称是随机生成的在 sysobjects 表中查看:
SELECT * FROM sysobjects WHERE name LIKE '%FK%'
问题是:两个 REFERENCES 的工作方式是否完全相同?如果我创建一个约束外键...或者如果我从列的定义行中引用一个 PK 是否相同?
我不知道这是否只能在 SQL 服务器中完成,或者它是 SQL 中的一般内容,我也尝试在 Google 上找到有关它的信息,但我没有任何运气(可能是因为我不知道什么我正在寻找)
【问题讨论】:
标签: sql sql-server database create-table