【问题标题】:SQL different behaviour of REFERENCE wordSQL REFERENCE 字的不同行为
【发布时间】: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


    【解决方案1】:

    同样,你也可以像这样在表 B 中内联命名你的约束:

    CREATE TABLE tableB (
    Id int NOT NULL IDENTITY(1,1),
    name varchar(50),
    idA int NOT NULL CONSTRAINT FK_TableB_TableA REFERENCES TableA(Id) ON DELETE CASCADE,
    CONSTRAINT tableB_pk PRIMARY KEY (Id))
    go
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多