新增sql server約束

2021-09-06 07:16:07 字數 4907 閱讀 9025

---新增主鍵約束 

alter table 表名 

add constraint 約束名 primary key (主鍵) 

---新增唯一約束 

alter table 表名 

add constraint 約束名 unique (字段) 

---新增預設約束 

alter table 表名 

add constraint 約束名 default ('預設內容') for 字段 

--新增檢查check約束,要求字段只能在1到100之間 

alter table 表名 

add constraint 約束名 check (字段 between 1 and 100 ) 

---新增外來鍵約束(主表stuinfo和從表stumarks建立關係,關聯欄位為stuno) 

alter table 從表 

add constraint 約束名 

foreign key(關聯字段) references 主表(關聯字段) 

go sql server中刪除約束的語句是: 

alter table 表名 drop constraint 約束名 

sp_helpconstraint 表名 找到資料表中的所有列的約束

-----------在建立表時建立約束------------

7.2.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] 

7.2.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 ]

[ on update ] ]

[ not for replication ]

各引數說明如下: 

references

指定要建立關聯的表的資訊。 

ref_table

指定要建立關聯的表的名稱。 

ref_column

指定要建立關聯的表中的相關列的名稱。 

on delete

指定在刪除表中資料時,對關聯表所做的相關操作。在子表中有資料行與父表中的對應資料行相關聯的情況下,如果指定了值cascade,則在刪除父表資料行時會將子表中對應的資料行刪除;如果指定的是no action,則sql server 會產生乙個錯誤,並將父表中的刪除操作回滾。no action 是預設值。 

on update

指定在更新表中資料時,對關聯表所做的相關操作。在子表中有資料行與父表中的對應資料行相關聯的情況下,如果指定了值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]

注意:臨時表不能指定外關鍵字約束。 

7.2.3 惟一性約束

惟一性約束指定乙個或多個列的組合的值具有惟一性,以防止在列中輸入重複的值。惟一性約束指定的列可以有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) /* 表約束 */

SQL server新增主外來鍵約束

新增主鍵約束 alter table 表名 add constraint 約束名 primary key 主鍵 新增唯一約束 alter table 表名 add constraint 約束名 unique 字段 新增預設約束 alter table 表名 add constraint 約束名 de...

mysql 新增約束 mysql怎麼新增約束?

在mysql資料庫中,建表時就可以進行對錶的各項進行一些操作,例如新增主鍵約束或者非空約束 也可以在建表後進行新增約束和刪除約束的操作。下面本篇文章就來帶大家具體了解一下,希望對大家有所幫助。什麼是約束?約束實際上就是表中資料的限制條件 目的是為了保證表中的記錄完整和有效。常用的約束有 1 非空約束...

Sql Server 約束查詢

主鍵約束 select tab.name as 表名 idx.name as 主鍵名稱 col.name as 主鍵列名 from sys.indexes idx join sys.index columns idxcol on idx.object id idxcol.object id and ...