程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 命名約束 vs 系統生成的約束

命名約束 vs 系統生成的約束

編輯:關於SqlServer

當你為一個表定義約束時,給約束命名是一個好習慣。另外,SQL Server會為約束創建系統自動生成的名稱。當在沒有給約束命名的情況下,生成數據定義語言(DDL)(當DDL應用在幾個數據庫上時),那麼系統生產約束名一般是不一樣的。


在為數據庫生成計劃後,再生成詳細的約束列表,與一個詳細計劃構造的合法約束列表進行對比,是一個很好的習慣。當數據庫相當大時,這樣做是非常有益的。

下面的腳本演示了命名約束、不命名約束及系統自動生成的約束名之間的區別,三者使用了同樣的表,只不過每次都是重新創建的:

CREATE TABLE Parent
(pkey1 INT NOT NULL
CONSTRAINT pk_Parent PRIMARY KEY (pkey1))
GO


CREATE TABLE ConstraintName
(Pkey INT NOT NULL
CONSTRAINT pk_CnstNm primary key,
Parent_pkey1 INT NOT NULL,
col1 INT NULL
CONSTRAINT ck_CnstNm_col1 CHECK (col1 IN ( 'a','b' ) )
CONSTRAINT df_CnstNm_col1 DEFAULT 1,
CONSTRAINT fk_Parent_CnstNm FOREIGN KEY (Parent_pkey1)
REFERENCES Parent (pkey1)
)
GO
exec sp_helpconstraint ConstraintName
GO
DROP TABLE ConstraintName
GO
CREATE TABLE ConstraintName
(Pkey INT NOT NULL
primary key,
Parent_pkey1 INT NOT NULL
FOREIGN KEY (Parent_pkey1) REFERENCES PARENT(pkey1),
col1 INT NULL
CHECK (col1 IN ( 'a','b' ) )
DEFAULT 1
)
GO
exec sp_helpconstraint ConstraintName
GO
DROP TABLE ConstraintName
GO
CREATE TABLE ConstraintName
(Pkey INT NOT NULL
primary key,
Parent_pkey1 INT NOT NULL
FOREIGN KEY (Parent_pkey1) REFERENCES PARENT(pkey1),
col1 INT NULL
CHECK (col1 IN ( 'a','b' ) )
DEFAULT 1
)
GO
exec sp_helpconstraint ConstraintName
GO
DROP TABLE ConstraintName
GO
DROP TABLE Parent
GO

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved