資料庫中的五種約束

來源:互聯網
上載者:User

資料庫中的五種約束及其添加方法
五大約束
1.—-主鍵約束(Primay Key Coustraint) 唯一性,非空性
 2.—-唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個
 3.—-檢查約束 (Check Counstraint) 對該列資料的範圍、格式的限制(如:年齡、性別等)
 4.—-預設約束 (Default Counstraint) 該資料的預設值
 5.—-外鍵約束 (Foreign Key Counstraint) 需要建立兩表間的關係並引用主表的列

五大約束的文法樣本
 1.—-添加主鍵約束(將stuNo作為主鍵)
 alter table stuInfo
 add constraint PK_stuNo primary key (stuNo)
 2.—-添加唯一約束(社會安全號碼唯一,因為每個人的都不一樣)
 alter table stuInfo
 add constraint UQ_stuID unique(stuID)
 3.—-添加預設約束(如果地址不填 預設為“地址不詳”)
 alter table stuInfo
 add constraint DF_stuAddress default (‘地址不詳’) for stuAddress
 4.—-添加檢查約束 (對年齡加以限定 15-40歲之間)
 alter table stuInfo
 add constraint CK_stuAge check (stuAge between 15 and 40)

alter table stuInfo
 add constraint CK_stuSex check (stuSex=’男’ or stuSex=’女′)

5.—-添加外鍵約束 (主表stuInfo和從表stuMarks建立關係,關聯欄位stuNo)

alter table stuInfo
 add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)

 約束(Constraint)是Microsoft SQL Server 提供的自動保持資料庫完整性的一種方法,定義了可輸入表或表的單個列中的資料的限制條件(有關資料完整性的介紹請參見第9 章)。在SQL Server 中有5 種約束:主關鍵字約束(Primary Key Constraint)、外關鍵字約束(Foreign Key Constraint)、惟一性約束(Unique Constraint)、檢查約束(Check Constraint)和預設約束(Default Constraint)。

1 主關鍵字約束
 主關鍵字約束指定表的一列或幾列的組合的值在表中具有惟一性,即能惟一地指定一行記錄。每個表中只能有一列被指定為主關鍵字,且IMAGE 和TEXT 類型的列不能被指定為主關鍵字,也不允許指定主關鍵字列有NULL 屬性。
 定義主關鍵字約束的文法如下:
 CONSTRAINT constraint_name
 PRIMARY KEY [CLUSTERED | NONCLUSTERED]
 (column_name1[, column_name2,…,column_name16])
 各參數說明如下:
 constraint_name
 指定約束的名稱約束的名稱。在資料庫中應是惟一的。如果不指定,則系統會自動產生一個約束名。
 CLUSTERED | NONCLUSTERED
 指定索引類別,CLUSTERED 為預設值。其具體資訊請參見下一章。
 column_name
 指定組成主關鍵字的列名。主關鍵字最多由16 個列組成。

例7-3: 建立一個產品資訊表,以產品編號和名稱為主關鍵字
 create table products (
 p_id char(8) not null,
 p_name char(10) not null ,
 price money default 0.01 ,
 quantity smallint null ,
 constraint pk_p_id primary key (p_id, p_name)
 ) on [primary]

2 外關鍵字約束
 外關鍵字約束定義了表之間的關係。當一個表中的一個列或多個列的組合和其它表中的主關鍵字定義相同時,就可以將這些列或列的組合定義為外關鍵字,並設定它適合哪個表中哪些列相關聯。這樣,當在定義主關鍵字約束的表中更新列值,時其它表中有與之相關聯的外關鍵字約束的表中的外關鍵字列也將被相應地做相同的更新。外關鍵字約束的作用還體現在,當向含有外關鍵字的表插入資料時,如果與之相關聯的表的列中無與插入的外關鍵字列值相同的值時,系統會拒絕插入資料。與主關鍵字相同,不能使用一個定義為 TEXT 或IMAGE 資料類型的列建立外關鍵字。外關鍵字最多由16
個列組成。
 定義外關鍵字約束的文法如下:
 CONSTRAINT constraint_name
 FOREIGN KEY (column_name1[, column_name2,…,column_name16])
 REFERENCES ref_table [ (ref_column1[,ref_column2,…, ref_column16] )]
 [ ON DELETE { CASCADE | NO ACTION } ]
 [ ON UPDATE { CASCADE | NO ACTION } ] ]
 [ NOT FOR REPLICATION ]
 各參數說明如下:

REFERENCES
 指定要建立關聯的表的資訊。
 ref_table
 指定要建立關聯的表的名稱。
 ref_column
 指定要建立關聯的表中的相關列的名稱。
 ON DELETE {CASCADE | NO ACTION}
 指定在刪除表中資料時,對關聯表所做的相關操作。在子表中有資料行與父表中的對應資料行相關聯的情況下,如果指定了值CASCADE,則在刪除父表資料行時會將子表中對應的資料行刪除;如果指定的是NO ACTION,則SQL Server 會產生一個錯誤,並將父表中的刪除操作復原。NO ACTION 是預設值。
 ON UPDATE {CASCADE | NO ACTION}
 指定在更新表中資料時,對關聯表所做的相關操作。在子表中有資料行與父表中的對應資料行相關聯的情況下,如果指定了值CASCADE,則在更新父表資料行時會將子表中對應的資料行更新;如果指定的是NO ACTION,則SQL Server 會產生一個錯誤,並將父表中的更新操作復原。NO ACTION 是預設值。
 NOT FOR REPLICATION
 指定列的外關鍵字約束在把從其它表中複製的資料插入到表中時不發生作用。
 例7-4:建立一個訂貨表,與前面建立的產品表相關聯
 create table   orders(
 order_id char(8),
 p_id char(8),
 p_name char(10) ,
 constraint pk_order_id primary key (order_id) ,
 foreign key(p_id, p_name) references products(p_id, p_name)
 ) on [primary]
 注意:暫存資料表不能指定外關鍵字約束。
惟一性約束
 惟一性約束指定一個或多個列的組合的值具有惟一性,以防止在列中輸入重複的值。惟一性約束指定的列可以有NULL 屬性。由於主關鍵字值是具有惟一性的,因此主關鍵字列不能再設定惟一性約束。惟一性約束最多由16 個列組成。
 定義惟一性約束的文法如下:
 CONSTRAINT constraint_name
 UNIQUE [CLUSTERED | NONCLUSTERED]
 (column_name1[, column_name2,…,column_name16])

例7-5:定義一個員工資訊表,其中員工的社會安全號碼具有惟一性。
create table employees (
 emp_id char(8),
 emp_name char(10) ,
 emp_cardid char(18),
 constraint pk_emp_id primary key (emp_id),
 constraint uk_emp_cardid unique (emp_cardid)
 ) on [primary]

7.2.4 檢查約束
 檢查約束對輸入列或整個表中的值設定檢查條件,以限制輸入值,保證資料庫的資料完整性。可以對每個列設定符合檢查。
 定義檢查約束的文法如下:
 CONSTRAINT constraint_name
 CHECK [NOT FOR REPLICATION]
 (logical_expression)
 各參數說明如下:
 NOT FOR REPLICATION
 指定檢查約束在把從其它表中複製的資料插入到表中時不發生作用。
 logical_expression
 指定邏輯條件運算式傳回值為TRUE 或FALSE。
 例7-6: 建立一個訂貨表其中定貨量必須不小於10。
 create table   orders(
 order_id char(8),
 p_id char(8),
 p_name char(10) ,
 quantity smallint,
 constraint pk_order_id primary key (order_id),
constraint chk_quantity check (quantity>=10) ,
 ) on [primary]
 注意:對計算資料行不能作除檢查約束外的任何約束。

7.2.5 預設約束
 預設約束通過定義列的預設值或使用資料庫的預設值對象綁定表的列,來指定列的預設值。SQL Server 推薦使用預設約束,而不使用定義預設值的方式來指定列的預設值。有關綁定預設約束的方法請參見“資料完整性”章節。
 定義預設約束的文法如下:
 CONSTRAINT constraint_name
 DEFAULT constant_expression [FOR column_name]
 例7-7:
 constraint de_order_quantity default 100 for   order_quantity
 注意:不能在建立表時定義預設約束,只能向已經建立好的表中添加預設約束。

7.2.6 列約束和資料表條件約束
 對於資料庫來說,約束又分為列約束(Column Constraint)和資料表條件約束(Table Constraint)。
 列約束作為列定義的一部分只作用於此列本身。資料表條件約束作為表定義的一部分,可以作用於
 多個列。
 下面舉例說明列約束與資料表條件約束的區別。
 例7-8:
 create table products (
 p_id char(8) ,
 p_name char(10) ,
 price money default 0.01 ,
 quantity smallint check (quantity>=10) , /* 列約束 */
 constraint pk_p_id primary key (p_id, p_name) /* 資料表條件約束 */

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.