1. 程式人生 > >mysql-約束

mysql-約束

spa field 其中 意義 明顯 ima rop 整數 任務

4、約束:

1)、對一個列添加的約束叫列級約束。對兩個或兩個以上的列添加的約束叫做表級約束。

2)、表級約束只能在字段後面添加,列級約束既可以添加在字段後面,也可以在最後添加。

3)、非空、默認只存在列級約束。主鍵、唯一、外鍵都既有表級約束又有列級約束。

4)、約束有:primary key (主鍵)、unique (唯一)、not null (非空) 、default (默認)、foreign key (外鍵)。5)、unsigned (無符號整數,從 0int 的最大值)6)、auto_increment (自增長,必須與主鍵同時使用)

1、主鍵:(primary key
) 添加:一般添加主鍵的時候都會再添加 auto_increment alter table tb_name add primary key(field_name); 刪除:刪除主鍵之前必須先刪除 auto_increment alter 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)存儲表的索引 ② 外鍵列必須建立了索引,MySQL
4.1.2以後的版本在建立外鍵時會自動創建索引,但如果在較早的版本則需要顯式建立; ③ 外鍵關系的兩個表的列必須是數據類型相似,也就是可以相互轉換類型的列,比如int和tinyint可以,而int和char則不可以; 外鍵的好處: ① 可以使得兩張表關聯,保證數據的一致性和實現一些級聯操作。 外鍵就是:引用字段的值必須在被引用字段中存在,除非引用字段是NULL 被引用字段必須有唯一約束或主鍵約束。 添加:添加外鍵之前一定要保證引用字段和被引用字段的類型一致,以及數據庫引擎一致(既:都為 InnoDB ) alter table tb1_name add constraint
fk_name foreign key (field1_name) references tb2_name (field2_name); 建表時添加外鍵: foreign key (field1_name) references tb2_name (field2_name); 刪除:alter table tb_name drop foreign key fk_name; 外鍵的完整定義: alter table tb1_name add constraint fk_name foreign key (field_name) references tb2_name (field_name) match [simple/full] 外鍵匹配模式:引用字段全不為空,則強匹配,否則,若匹配。 on delete [cascade/no action]為cascade時,刪除被引用表中數據時,引用表中的數據也會刪除。為no action時,刪除被引用表中的數據之前要先刪除引用表中的數據,否則會返回錯誤。 on update [cascade/no action]更新時時一樣的。同上。 對於on deleteon update 來說,默認的都是 no action 。 當添加外鍵失敗時,有兩種情況: ① 數據類型不一致 ② 數據庫引擎不對,檢查是不是InnoDB 自動鍵更新和刪除: 外鍵可以保證新插入的記錄的完整性,但是,如果在REFERENCES從句中已命名的表刪除記錄會怎麽樣?在使用同樣的值作為外鍵的輔助表中會發生什麽? 很明顯,那些記錄也應該被刪除,否則在數據庫中就會有很多無意義的孤立記錄,MYSQL可以通過向FOREIGN KEY...REFERENCES修飾符添加一個ON DELETE 或ON UPDATE子句簡化任務,它告訴了數據庫在這種情況如何處理孤立任務 關鍵字 含義 CASCADE 刪除包含與已刪除鍵值有參照關系的所有記錄 SET NULL 修改包含與已刪除鍵值有參照關系的所有記錄,使用NULL值替換(只能用於已標記為NOT NULL的字段) RESTRICT 拒絕刪除要求,直到使用刪除鍵值的輔助表被手工刪除,並且沒有參照時(這是默認設置,也是最安全的設置) NO ACTION 啥也不做 請註意,通過ON UPDATEON DELETE規則,設置MYSQL能夠實現自動操作時,如果鍵的關系沒有設置好,可能會導致嚴重的數據破壞, 例如:如果一系列的表通過外鍵關系和ON DELETE 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/key name; 4、自增長約束(auto_increment) auto_increment 的添加和刪除都是使用 change 來進行的。其實質是:新建一個同名字段來代替原有字段,但是在這個過程中primary key是不會改變的。 如元字段為:id int(10) unsigned primary key auto_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 key auto_increment) 5、change
列級約束都可以通過change 來實現修改。

default 、unsigned 、not null

mysql-約束