Sql-Server
SQL Server - 唯一約束語法
以下兩種方式建構的表在功能上有區別嗎?
CREATE TABLE [dbo].[test_uq]( [ID] [int] NOT NULL, [f1] [int] NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[test_uq] ADD UNIQUE NONCLUSTERED(f1)
對比
CREATE TABLE [dbo].[test_uq]( [ID] [int] NOT NULL, [f1] [int] NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[test_uq] ADD CONSTRAINT UQ_f1 UNIQUE (f1);
我相信他們都在實現一個唯一約束,並在
$$ f1 $$列,但考慮到不同的語法(無論是在創建過程中,還是在之後從 SSMS 編寫建構腳本),我想知道一個是否不同(或更好?)不知何故。感謝您的任何回饋。
已測試 - 見下圖(將第二個範例中的表重命名為
test_uq_2
)確實沒有太大區別,但是 - 在我看來,第二個範例更好,因為它使您能夠命名約束/索引,而在第一個範例中 SQL Server 會自動命名它
我更喜歡將其創建為 1) 顯式命名和 2) 忽略 NULL 或使用其他過濾條件的能力的索引:
CREATE TABLE [dbo].[test_uq]( [ID] [int] NOT NULL, [f1] [int] NULL ) ON [PRIMARY] GO CREATE UNIQUE NONCLUSTERED INDEX uq_test ON test_uq(f1) WHERE f1 IS NOT NULL;