增加約束的語句2008-07-17 16:34---新增主鍵約束
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
指定列的外關鍵字約束在把從其它表中複製的資料插入到表中時不發生作用。
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) /* 表約束 */
mysql增加約束sql語句 sql語句新增約束
sql語句新增約束 主鍵約束 primary key constraint 要求主鍵列的資料唯一,並且不允許為空。唯一約束 unique constraint 要求該列唯一,允許為空,但只能出現乙個空值。檢查約束 check constraint 某列取值範圍限制 格式限制等,如有關年齡的約束。預設...
mysql增加約束sql語句 SQL語句新增約束
檢查資料庫是否存在 use master go if exists select from sysdatabases where drop database studentdb 建資料庫 create database studentdb on primary name student filena...
SQL語句對於約束的增加及修改
sql語句對於約束的增加及修改 使用sql 語句在初次建立資料表時,同時增加約束的方法非常簡單 create table 表名 列名 列的屬性 約束名 n 即可,可建立的約束包括 primary key foreign key null not null check default等例如 creat...