1. 程式人生 > >mysql學習->存儲引擎(Innodb)

mysql學習->存儲引擎(Innodb)

upd country 情況下 增長 語句 ble 相同 cas alter

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)