1. 程式人生 > >Mysql 約束(Constraint)

Mysql 約束(Constraint)

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

相關推薦

MySQL——約束(constraint)詳解

一、什麼是約束 約束英文:constraint 約束實際上就是表中資料的限制條件 二、約束作用 表在設計的時候加入約束的目的就是為了保證表中的記錄完整和有效 比如name欄位中要讓其使用者名稱不重複,這就需要新增約束。或者必須註冊的時候需要

Mysql 約束(Constraint)

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

linux 之mysql——約束constraint)詳解

一、什麼是約束 約束英文:constraint 約束實際上就是表中資料的限制條件 二、約束作用 表在設計的時候加入約束的目的就是為了保證表中的記錄完整和有效性 比如name欄位中要讓其使用者名稱不重複,這就需要新增約束。或者必須註冊的時候需要新增郵箱等  三、約束種類

mysql-約束

spa field 其中 意義 明顯 ima rop 整數 任務 4、約束: 1)、對一個列添加的約束叫列級約束。對兩個或兩個以上的列添加的約束叫做表級約束。 2)、表級約束只能在字段後面添加,列級約束既可以添加在字段後面,也可以在最後添加。 3)、非空、默認只存

MySQL--約束和修改數據表總結

分享 cnblogs 總結 -- logs images http 修改 mysql MySQL--約束和修改數據表總結

MYSQL約束 -- not null 非空約束

odi ros 如果 bsp ima create tiny mic creat 2、not null 非空約束   用於確保當前列的值不為空;在創建表時,如果不指定是否可以為空,字段默認可以為NULL。 -- 這是上一篇默認約束創建的表 CREATE TABLE `te

mysql 約束

必須 文章 student rop ssi postgresq join 用途 常量 文章來源:https://segmentfault.com/a/1190000006671061 一. 關系型數據庫 市場上主流的關系型數據庫:Oracle、DB2、Sybase

mySQL 約束 (Constraints)

pri SQ rim mys default alter str table rem 約束用於限制加入表的數據的類型: 1.創建表時規定約束(通過 CREATE TABLE 語句) 2.表創建之後也可以(通過 ALTER TABLE 語句)。 約束類型: NOT NULL

mysql約束

ons src 多表 創建組 包括 性別 mys 唯一約束 num 什麽是mysql約束? 約束是一種限制,它通過對表的行或列的數據做出限制,來確保表的數據的完整性、唯一性。 常見的額約束 |---主鍵約束:primary key 主鍵約束相當於 唯一約束 + 非空約束 的

mysql-約束介紹

個學生 student cda 自動添加 是否 color hid 需要 info 一、約束介紹 約束是一種限制,它通過對表的行或列的數據做出限制,來確保數據的完整性、一致性。約束條件與數據類型寬度一樣都是可選參數。 常用約束: PRIMARY KEY (PK)

MySQL約束條件和多表查詢方式詳解

left join 思考 mar 提高 詳解 union 存儲 class mys 一、約束什麽是約束?簡述:除了數據類型以外的約束的為什麽使用約束?簡述:為了保證數據的合法性 完整性;二、約束分類:  not null 跟整型時使用其作用是限制插入數據不能為空 crea

約束 CONSTRAINT

rim sql class 一個 定義 pri 強制 增加 key) 約束用於限制加入表中數據的類型 約束的種類: 非空約束(NOT NULL):約束列不接受NULL值,強制字段始終包含值。 唯一約束(UNIQUE):約束一列或一組列中的數據是唯一的。表中可以有多個唯一約束

MYSQL約束的新增和刪除

在MYSQL資料庫中,建表時就可以進行對錶的各項進行一些操作,例如設定主鍵或者非空約束,這裡主要講講如何在建表後進行新增約束和刪除約束 首先,建一個十分普通的表 create table test(test_no char(10),test_point int, test_student ch

JavaWeb--MySQL約束

檢視事務的提交方式: select @@autocommit; 設定事務的提交方式: set @@autocommit = 0/1 ; -- 0代表手動提交,1代表自動提交 limit 不能搭配 in使用 eg: select * from user where id in (sele

Mysql-----約束、索引

約束 作用:保證資料的完整性,一致性,有效性, 約束分類:             1)預設約束(default):插入記錄時,如果不給該欄位,則使用預設值        

SQL基礎- 約束(CONSTRAINT)

--============================= --SQL基礎--> 約束(CONSTRAINT) --============================= 一、幾類資料完

mysql約束條件

表結構 mysql> create table t1(id int,name char(6),sex enum('male','female')); Query OK, 0 rows affected (0.01 sec) mysql> desc t1;

**MySql約束 篇2/共3篇 [史上最全重點,web基礎day03] *

今日內容 1. DQL:查詢語句 1. 排序查詢 2. 聚合函式 3. 分組查詢 4. 分頁查詢 2. 約束 3. 多表之間的關係 4. 正規化 5. 資料庫的備份和還原 mysql約束: 1. 分組前篩選用where 分組後用having *

SQLServer與MySQL約束/索引命名的一些差異總結

約束是資料庫完整性的保證,主要分為:主鍵/外來鍵/唯一鍵/預設值/check等類別,約束是一個邏輯概念,表示資料的某些特性(不能為空,唯一,必須滿足某些條件等等),索引是一個邏輯與物理概念的結合,邏輯上是一種資料結構,物理上要佔用實實在在的儲存空間。對於主鍵和唯一鍵約束,在sqlserver中會自動生成唯一索

刪除具有約束constraint列的方法---T-sql

當刪除一個表中的一個欄位,恰好這個欄位有預設值或是外來鍵等約束的話,直接刪除會報錯 Msg 5074, Level 16, State 1, Line 32The object 'DF__tmpTblFor__Incre__3D6081D7' is dependent on