程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql字段約束

mysql字段約束

編輯:MySQL綜合教程

mysql字段約束


字段約束用來確保數據的完整性(可靠性和准確性)。

1主鍵約束
1>主鍵簡介:
主鍵是表的標志列,在mysql中支持將一個或多個字段作為一個主鍵來使用。關系數據庫依賴於主鍵,主鍵在物理層面只有兩個用途:
唯一的標志一行記錄作為一個可以被外鍵引用的有效對象。 2>設置主鍵:
創建主鍵分為單字主鍵和復合主鍵
單字主鍵創建只需在字段後邊添加primary key
primary key
如上圖所示,在mysqltest數據庫創建student表,把學生的sid列設置為單字主鍵。
復合主鍵的創建:
復合主鍵的創建
如果有一張表,創建的時候沒有添加主鍵,現在要給它添加主鍵:
alter table table_name add primary key(字段名稱);
增加主鍵
如上圖,給已有的good表設置gid為主鍵。
3>修改主鍵:
修改主鍵有兩種可能,一種是表中有主鍵,需要將主鍵修改在其它字段上(如上邊給good表添加主鍵),另一種是表中沒有主鍵,需要修改字段類型,使其成為主鍵。類型的修改要使用modify關鍵字。
對於已經設置了主鍵的表,主鍵的修改不能夠直接執行。必須先刪除原有主鍵,再重新設置主鍵。主鍵的刪除只是刪除了指定字段或字段組的主鍵約束,並不能夠刪除字段或字段組,一個表中只能有一個主鍵。
前邊建的book表有主鍵字段組(bnum、typeid),現將表中的原有主鍵刪除,將字段bnum修改為主鍵。
刪除主鍵:alter table table_name drZ喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcCBwcmltYXJ5IGtleTs8YnIgLz4NCjxpbWcgYWx0PQ=="修改主鍵" src="http://www.bkjia.com/uploads/allimg/160420/040K21550-3.png" title="\" />

2外鍵約束

1>外鍵簡介
外鍵記錄了表與表之間字段的聯系。外鍵將不同表的字段關聯起來,使這些數據在修改、刪除時有著關聯,在數據操作時維護這些數據完整性。
外鍵有兩個作用:

讓數據自己通過外鍵來保證數據的完整性和一致性能夠增加數據庫表關系的可讀性
外鍵的定義還要遵循以下的情況:所有的表必須是InnoDB型,它們不能是臨時表,mysql中只有InnoDB類型的表才支持外鍵所有要建立外鍵的字段必須建立約束對於非InnoDB表,foreign key 子句會被忽略

2>外鍵的使用
語法:
alter table table_name add [constraint 外鍵名] foreign key [id] (index_cil_name, …) references table_name (index_col_name, …)
[on delete {cascade " set null | no action | restrict}]
[on update {cascade | set null | no action | restrict}]
可以看到mysql對創建外鍵要求嚴格,精確到字段的類型和長度。
對於外鍵最好采用 on delete restrict 和on update cascade的方式。
cascade:外鍵表中外鍵字段值會跟隨父表被跟新,或所在的列會被刪除。
no action:不進行任何關聯操作
restrict:restrict相當於no action,即不進行任何操作。拒絕父表修改外鍵關聯列,刪除記錄。
set null:在父表的外鍵關聯字段被修改和刪除時,外建表的外鍵列被設置為空(null)。

對於數據的添加,子表的外鍵列輸入的值,只能是父表外鍵關聯列已有的值,否則出錯。
現有剛剛創建的表student和book。把book中typeid字段對應student表中的sid字段:
增加/查看外鍵
通過show create table table_name 可以創建表的代碼以及存儲引擎,同時可以看到外鍵的設置。
刪除外鍵:
alter table table_name drop foreign key 外鍵名;
一張表的外鍵可能不止一個,刪除多個外鍵可以重復使用上述語句。
刪除外鍵
注:定義外鍵時,使用“constraint 外鍵名 foreign key …”語句,能夠很方便的通過外鍵名來刪除外鍵。
3. 非空約束
被設置了非空約束的字段,在添加數據的時候必須要有數據。非空約束限制字段中的內容不能為空,但可以是空串或0。
在創建表的時候直接在字段類型後邊添加 not null 或null,即可設置為字段非空或者空。
把已有的表某個字段設置為非空:
alter table table_name modify 字段名 字段類型 not null;
4. 默認值
默認值是為字段指定默認的數據值。默認值的使用減輕了數據添加的負擔,默認值除了可以定義為指定值,還可以設置為當前時間。被設置默認值的字段最好不為空,否則系統將無法確定該字段在添加時添加null還是默認值。
添加默認值:
在創建表的時候直接字段類型後邊添加 “default 默認數據”,對於已有的表使用set關鍵字:
alter table table_name alter 字段名 set default 默認值數據;
刪除已有的默認值:
alter table table_name alter 字段名 drop default;
修改默認值:可先執行刪除語句在執行添加默認值語句。
默認值
上述sql語句先給typeid添加默認值2,再修改為5.
5. 唯一性約束
唯一性約束(unique constraint)要求添加該約束的列字段的值唯一,允許為空,但只能出現一個空值。唯一約束可以確保一列或多列不出現重復值。
創建唯一約束字段:
在建表時,可以直接創建唯一約束,可以直接在字段的數據類型後邊直接添加unique關鍵字,也可以在所有字段定義之後使用[constraint <約束名>] unique(<字段名>)
對於已經存在的表和字段,添加唯一約束要使用add關鍵字:
alter table table_name add unique(字段列表);
刪除唯一約束:
alter table table_name modify column 字段名 字段類型 [字段約束];
6. 自增約束
自增約束是一種由系統自動增加並填入字段數值的約束。
auto_increment是數據列的一種屬性,只適用於整數類型數據列,
auto_increment數據列必須有唯一約束,以避免序號重復,
mysql一張表中只能有一個auto_increment字段,
當使用truncate table table_name 刪除全部數據時,auto_increment會從1重新開始編號,
自增字段的值只能一次加1,而不能像SQL Server數據庫中的自增約束一樣,每次加2、每次加3,
在InnoDB數據表中,不可通過 create table or alter table 的auto_increment=n 語句來改變自增初值。
7. 刪除指定名稱的約束
mysql中,一個字段的所有約束都可以同名約束名刪除,使用drop index語句:
alter table table_name drop index 約束名;
刪除指定名稱的約束

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved