国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

創建和使用約束

2024-07-21 02:13:03
字體:
來源:轉載
供稿:網友
約束(constraint)是microsoft sql server 提供的自動保持數據庫完整性的一種方法,定義了可輸入表或表的單個列中的數據的限制條件(有關數據完整性的介紹請參見第9 章)。在sql server 中有5 種約束:主關鍵字約束(primary key constraint)、外關鍵字約束(foreign key constraint)、惟一性約束(unique constraint)、檢查約束(check constraint)和缺省約束(default constraint)。

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 { 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]
    注意:臨時表不能指定外關鍵字約束。

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) /* 表約束 */

  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • 上一篇:自定義數據類型

    下一篇:創建數據庫表

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 绥德县| 甘德县| 元朗区| 祁门县| 林西县| 凉山| 基隆市| 北碚区| 庄河市| 盐津县| 虹口区| 应城市| 蓝田县| 鲁山县| 美姑县| 贡山| 营口市| 阿瓦提县| 海盐县| 阿鲁科尔沁旗| 平山县| 华亭县| 湟中县| 仁寿县| 秦安县| 白沙| 安岳县| 宣恩县| 普陀区| 依安县| 合作市| 和静县| 甘肃省| 东丽区| 青冈县| 扎鲁特旗| 滨州市| 家居| 新宁县| 六枝特区| 库伦旗|