標籤:情況 delete cascade log check set 遞增 有關 ict
InnoDB引擎提供了具有提交,復原和崩潰恢複能力的事務安全,但是對比Myisam引擎效率會差一些,並且會佔用更多的磁碟空間和保留資料和索引
1.自動成長列
innodb表的自動成長列可以手工輸入,但是插入的值如果是空或者0,則實際插入的將是自動成長後的值,
可以通過 ALTER TABLE 表名 AUTO_INCREMENT = n 語句強制設定自動成長列的初始值,預設從1開始,但是該強制的預設值是保留在記憶體中的,如果該值在使用之前資料庫重新啟動,那麼這個強制的預設值就會丟失,就需要在資料庫啟動後重新啟動。
對於innodb表自動成長列必須是索引,如果是複合式索引,也必須是複合式索引的第一列,但是對於Myisam表自動成長列可以是複合式索引的其他列,這樣插入記錄後,自動成長列是按照複合式索引的前面幾列進行排序後遞增的,例如建立新的myisam表,自動成長列d1是複合式索引的第二列,對於插入一些記錄後,可以發現自動成長列是按照複合式索引的第一列d2進行排序後遞增的
2.外鍵約束
Mysql支援外鍵的只有innodb,在建立外鍵的時候,要求父表有對應的索引,子表在建立外鍵的時候也會自動建立對應的索引
例子:
兩個表,country是父表,county_id為主鍵索引,city表是子表,county_id欄位為外鍵,對應county表的主鍵county_id
在建立索引時,可以指定在刪除,更新父表時,對子表進行的相應操作,包括RESTRICT,CASCADE,SET NULL,和NO ACTION,其中RESTRICT和NO ACTION相同,是指限制在字表有關聯記錄的情況下不能更新,CASCADE表示在父表更新或刪除時,更新或者刪除字表對應的記錄,SET NULL則表示父表在更新或者刪除的時候,子表的對應欄位被SET NULL
在上面建立表的時候,字表的外鍵指定是ON DELETE RESTRICT ON UPDATE CASCADE,主表在刪除記錄的時候,如果子表有對應記錄不允許被刪除,主表更新的時候,如果子表有對應的記錄,則子表對應更新
當某個表被其他表建立了外鍵參照,那麼該表對應的索引或者主鍵禁止被刪除,當主表更新時,子表對應的也更新了
,
可以通過SET FOREIGN_KEY_CHECKS = 0 來關閉外鍵,或者等1來還原。
mysql學習->儲存引擎(Innodb)