4、約束:1)、對乙個列新增的約束叫列級約束。對兩個或兩個以上的列新增的約束叫做表級約束。2)、表級約束只能在字段後面新增,列級約束既可以新增在字段後面,也可以在最後新增。3)、非空、預設只存在列級約束。主鍵、唯
一、外來鍵都既有表級約束又有列級約束。4)、約束有:primary key (主鍵)、unique (唯一)、not null (非空) 、default (預設)、foreign key (外來鍵)。5)、unsigned (無符號整數,從 0 到 int 的最大值)6)、auto_increment (自增長,必須與主鍵同時使用)1、主鍵:(primary key)
新增:一般新增主鍵的時候都會再新增 auto_incrementalter table tb_name add primary key(field_name);
刪除:刪除主鍵之前必須先刪除 auto_incrementalter table tb_name drop primary key;2、外來鍵:(foreign key)
外來鍵的使用條件:
① 兩個表必須是 engine=innodb 表,myisam表暫時不支援外來鍵
innodb 是mysql的資料庫引擎之一,其支援事務的4大特性並相容事務。
isam(索引順序訪問方法:indexed sequential access method)也是一種資料庫引擎在其中資料組織成固定長度的記錄,並按順序儲存。
myisam 每個myisam在磁碟上儲存成三個檔案,每個檔案都是以表明開頭,擴張名支出檔案的型別:
.frm:儲存表定義
.myd(mydata)儲存表的資料
.myi(myindex)儲存表的索引
② 外來鍵列必須建立了索引,mysql4.1.2以後的版本在建立外來鍵時會自動建立索引,但如果在較早的版本則需要顯式建立;
③ 外來鍵關係的兩個表的列必須是資料型別相似,也就是可以相互轉換型別的列,比如int和tinyint可以,而int和char則不可以;
外來鍵的好處:
① 可以使得兩張表關聯,保證資料的一致性和實現一些級聯操作。
外來鍵就是:引用欄位的值必須在被引用欄位中存在,除非引用欄位是null
被引用字段必須有唯一約束或主鍵約束。
新增:新增外來鍵之前一定要保證引用欄位和被引用欄位的型別一致,以及資料庫引擎一致(既:都為 innodb )alter table tb1_name add constraint fk_name foreign key (field1_name) referencestb2_name (field2_name);
建表時新增外來鍵:foreign key (field1_name) referencestb2_name (field2_name);
刪除:alter table tb_name drop foreign keyfk_name;
外來鍵的完整定義:alter table tb1_name add constraintfk_nameforeign key(field_name)referencestb2_name (field_name)
match[******/full]外來鍵匹配模式:引用欄位全不為空,則強匹配,否則,若匹配。on delete [cascade/no action]為cascade時,刪除被引用表中資料時,引用表中的資料也會刪除。為no action時,刪除被引用表中的資料之前要先刪除引用表中的資料,否則會返回錯誤。on update [cascade/no action]更新時時一樣的。同上。
對於ondelete 和 on update來說,預設的都是 no action 。
當新增外來鍵失敗時,有兩種情況:
① 資料型別不一致
② 資料庫引擎不對,檢查是不是innodb
自動鍵更新和刪除:
外來鍵可以保證新插入的記錄的完整性,但是,如果在references從句中已命名的表刪除記錄會怎麼樣?在使用同樣的值作為外來鍵的輔助表中會發生什麼?
很明顯,那些記錄也應該被刪除,否則在資料庫中就會有很多無意義的孤立記錄,mysql可以通過向foreignkey...references修飾符新增乙個on delete或on update子句簡化任務,它告訴了資料庫在這種情況如何處理孤立任務
關鍵字 含義cascade刪除包含與已刪除鍵值有參照關係的所有記錄set null修改包含與已刪除鍵值有參照關係的所有記錄,使用null值替換(只能用於已標記為not null的字段)restrict拒絕刪除要求,直到使用刪除鍵值的輔助表被手工刪除,並且沒有參照時(這是預設設定,也是最安全的設定)
no action 啥也不做
請注意,通過onupdate 和 ondelete規則,設定mysql能夠實現自動操作時,如果鍵的關係沒有設定好,可能會導致嚴重的資料破壞,
例如:如果一系列的表通過外來鍵關係和ondelete cascade規則連線時,任意乙個主表的變化都會導致甚至只和原始刪除有一些將要聯絡的記錄在沒有警告的情況被刪除,所以,我們在操作之前還要檢查這些規則的,操作之後還要再次檢查.
所有tables必須是innodb型 ,它們不能是臨時表。
· 在引用表中,必須有乙個索引,外來鍵列以同樣的順序被列在其中作為第一列。這樣乙個索引如果不存在,它必須在引用表裡被自動建立。
· 在引用表中,必須有乙個索引,被引用的列以同樣的順序被列在其中作為第一列。
· 不支援對外鍵列的索引字首。這樣的後果之一是blob和text列不被包括在乙個外來鍵中, 這是因為對這些列的索引必須總是包含乙個字首長度。
· 如果constraintsymbol 被給出,它在資料庫裡必須是唯一的。如果它沒有被給出,innodb自動建立這個名字。3、唯一約束(unique)
新增:alter table tb_name add unique(field1_name,field2_name, ... );
刪除:alter table tb_student drop index/keyname;4、自增長約束(auto_increment)
auto_increment 的新增和刪除都是使用 change 來進行的。其實質是:新建乙個同名字段來代替原有字段,但是在這個過程中primary key是不會改變的。
如元字段為:idint(10) unsigned primary keyauto_increment
刪除:alter table tb_name change id id int(10) unsigned; (其結果為:id int(10) unsigned primary key)
新增:alter table tb_name change id id int(10) unsigned auto_increment; (其結果為:id int(10) unsigned primary keyauto_increment)5、change
列級約束都可以通過change 來實現修改。default 、unsigned 、not null
mysql中的約束怎麼寫 MySql 常見約束
常見約束 含義 一種限制,用於限制表中的資料,為了保證表中的資料的準確和可靠性 分類 六大約束 not null 非空,用於保證該字段的值不能為空 比如姓名 學號等 default 預設,用於保證該字段有預設值 比如性別 primary key 主鍵,用於保證該字段的值具有唯一性,並且非空 比如學號...
mysql怎麼約束 MySQL 約束詳解
mysql 約束詳解 mysql 中的約束是用來保證資料的完整性的機制。資料完整性一般有以下三種形式 實體完整性 保證表中有乙個主鍵。域完整性 保證資料每列的值滿足特定條件。引用完整性 保證兩張表之間的引用關係。以上三種形式的完整性在 mysql 中都有相應約束進行保證。使用主鍵和唯一鍵約束可以保證...
mysql 新增約束 mysql怎麼新增約束?
在mysql資料庫中,建表時就可以進行對錶的各項進行一些操作,例如新增主鍵約束或者非空約束 也可以在建表後進行新增約束和刪除約束的操作。下面本篇文章就來帶大家具體了解一下,希望對大家有所幫助。什麼是約束?約束實際上就是表中資料的限制條件 目的是為了保證表中的記錄完整和有效。常用的約束有 1 非空約束...