【发布时间】:2019-01-25 10:56:38
【问题描述】:
我有这段代码(在 MS SQL Server Management Studio 2017 中):
CREATE TABLE [dbo].[tblEStau](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Status] [nvarchar](20) NULL,
[ErrorCode] [int] NULL,
[LastUpdate] [datetime] NULL,
CONSTRAINT [PK_tblEStau] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
他们在这里真正想要实现的是 Id 字段上的 PRIMARY KEY(并且仅在 Id 上)。
但这就是这里发生的事情吗?因为没有指定字段名称,所以像这样:
CONSTRAINT [PK_tblEStau] PRIMARY KEY (Id) CLUSTERED
那么,默认情况下,所有列都会包含在此 PRIMARY KEY 中吗?
所以我的问题:
有这个:
CREATE TABLE [dbo].[tblEStau](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Status] [nvarchar](20) NULL,
[ErrorCode] [int] NULL,
[LastUpdate] [datetime] NULL,
CONSTRAINT [PK_tblEStau] PRIMARY KEY CLUSTERED
) ON [PRIMARY]
和这段代码一样的效果:
CREATE TABLE [dbo].[tblEStau](
[Id] [int] NOT NULL PRIMARY KEY,
[Status] [nvarchar](20) NULL,
[ErrorCode] [int] NULL,
[LastUpdate] [datetime] NULL
) ON [PRIMARY]
已经感谢您的帮助!
【问题讨论】:
-
“如果会发生什么”,为什么不试试看呢?
-
目前的情况是这个系统非常慢。我不是专家,所以我想知道这段代码实际上做了什么。我不能像那样更改代码,但我只是在调查这个......
-
在我的数据库系统上,如果我按照指示更改它,我会收到错误消息。如果它对您来说是有效的语法,它可能是特定方言的,所以请添加适当的标签来指示您正在使用的 RDBMS 产品。在您自己的机器上设置该产品的本地实例也是一个非常好的主意,这样您就可以例如不受惩罚地创建新的数据库、表格、视图和实验。通过做,你会学到很多东西。
标签: sql sql-server key constraints