SQL Server中的外键 - 使用哪种样式?

2 sql sql-server foreign-keys

在我的数据库中,我有以下代码

CREATE TABLE [Users]
(
     userID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
     Username VARCHAR(255),
     Password VARCHAR(255)
);

CREATE TABLE [Image]
(
    ImageID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Imagename VARCHAR,
    userID INT,

    FOREIGN KEY(userID) REFERENCES Users (userID)
);
Run Code Online (Sandbox Code Playgroud)

但是,在stackOverflow和其他多个网站上,人们建议像这样写:

CREATE TABLE [Users]
(
    userID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Username VARCHAR(255),
    Password VARCHAR(255)
);

CREATE TABLE [Image]
(
    ImageID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Imagename VARCHAR,
    userID INT,

    CONSTRAINT fk_Users 
        FOREIGN KEY(userID) REFERENCES Users (userID)
);
Run Code Online (Sandbox Code Playgroud)

我已经尝试过执行这两个语句,它似乎也是这样做的..

我错过了什么,写作时的诀窍是什么CONSTRAINT fk_Users

Gor*_*off 5

写入constraint允许您命名约束.

通常,在违反约束时会注意到这一点.如果您有机会命名约束,则错误消息将更有意义.

例如,这个:

INSERT语句与FOREIGN KEY约束"fk_image_userId"冲突.冲突发生在数据库"rextester",表"dbo.Users",列'userID'中.

该语句已终止.

比这更清楚:

INSERT语句与FOREIGN KEY约束"FK__Image__userID__09211CD4"冲突.冲突发生在数据库"rextester",表"dbo.Users",列'userID'中.

该语句已终止.

此外,约束名称alter table在您删除或禁用约束时使用,因此具有合理命名的约束使得更容易.

  • @Gozzah...该名称也用于引用约束的`alter table`语句. (3认同)