Innodb儲存引擎
InnoDB是什麼
InnoDB,是MySQL的資料庫引擎之一,與傳統的ISAM與MyISAM相比,InnoDB的最大特色就是支援了ACID相容的事務 (Transaction)功能,類似於PostgreSQL。
目前InnoDB採用雙軌制授權,一是GPL授權,另一是專有軟體授權。
MySQL5.5以後預設使用InnoDB儲存引擎,其中InnoDB和BDB提供事務安全表,其它儲存引擎都是非事務安全表。
如果沒有指定InnoDB配置選項,MySQL將在MySQL資料目錄下建立一個名為ibdata1的10MB大小的自動擴充套件資料檔案,以及兩個名為 ib_logfile0和ib_logfile 1的5MB大小的日誌檔案。
ibdata1的大小在my.cnf檔案中配置:innodb_data_file_path = ibdata1:10G:autoextend
可以設定最大資料檔案限制,以免超過系統支援的最大檔案: innodb_data_file_path = ibdata1:100M:autoextend:max:500M
日誌檔案大小在my.cnf檔案中配置:innodb_log_file_size = 256M innodb_log_files_in_group = 2
Innodb儲存引擎可以使用共享表空間或獨立表空間,使用獨立表空間時,需要將innodb_file_per_table加到配置檔案中,也可以在 variables中開啟。
共享表空間是將所有的表的資料和索引儲存在ibdata1中,這樣的缺點是拷貝時必須拷貝整個大檔案,而且刪除表後容易產生碎片。
獨立表空間是為每個表建立一個.ibd檔案用來儲存資料和.frm用來存資料詞典資訊,這樣,mysql就將innodb表的資料存入各自對應的.ibd 檔案中了,但結構等資訊還是會寫入ibdata。 innodb_file_per_table變數只能在配置檔案裡修改,不能使用set global … 將innodb_file_per_table關閉之後,建立innoDB表時只生成.frm檔案,資料和索引都儲存在共享表空間ibdata1中。
修改預設引擎的方法 修改InnoDB預設引擎:修改配置檔案中的default-storage-engine。在配置檔案my.ini中的 [mysqld] 下面加入default-storage-engine=INNODB
檢視當前資料庫預設引擎:show variables like ‘default_storage_engine’
列出當前資料庫所支援到引擎:show engines和show variables like ‘have%’其中Value顯示為disabled的記錄表示資料庫支援此引擎,而在資料庫啟動時被禁用。
在MySQL5.1以後,INFORMATION_SCHEMA資料庫中存在一個ENGINES的表,它提供的資訊與show engines;語句完全一樣,可以使用下面語句來查詢哪些儲存引擎支援事物處理:select engine from information_chema.engines where transactions = ‘yes`; 通過engine關鍵字在建立或修改資料庫時指定所使用到引擎。
InnoDB特點
InnoDB儲存引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是要對比MyISAM的儲存引擎,InnoDB寫的處理效率差一些並且會佔用更多 的磁碟空間以保留資料和索引。InnoDB表型別可以看作是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外來鍵約束的功能。
Innodb儲存引擎管理主要基於兩個檔案:表空間資料檔案和日誌檔案。
InnoDB儲存它的表&索引在一個表空間中,表空間可以包含數個檔案(或原始磁碟分割槽)。
1)自動增長列:
InnoDB表的自動增長列可以手工插入,但是插入的如果是空或0,則實際插入到則是自動增長後到值。可以通過”ALTER TABLE…AUTO_INCREMENT=n;”語句強制設定自動增長值的起始值,預設為1,但是該強制到預設值是儲存在記憶體中,資料庫重啟後該值將會 丟失。可以使用LAST_INSERT_ID()查詢當前執行緒最後插入記錄使用的值。如果一次插入多條記錄,那麼返回的是第一條記錄使用的自動增長值。
對於InnoDB表,自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一列,但是對於MyISAM表,自動增長列可以是組合索引的其他列,這 樣插入記錄後,自動增長列是按照組合索引到前面幾列排序後遞增的。
2)外來鍵約束:
MySQL支援外來鍵的儲存引擎只有InnoDB,在建立外來鍵的時候,父表必須有對應的索引,子表在建立外來鍵的時候也會自動建立對應的索引。
在建立索引的時候,可以指定在刪除、更新父表時,對子表進行的相應操作,包括restrict、cascade、set null和no action。其中restrict和no action相同,是指限制在子表有關聯的情況下,父表不能更新;casecade表示父表在更新或刪除時,更新或者刪除子表對應的記錄;set null 則表示父表在更新或者刪除的時候,子表對應的欄位被set null。
當某個表被其它表建立了外來鍵參照,那麼該表對應的索引或主鍵被禁止刪除。
可以使用set foreign_key_checks=0;臨時關閉外來鍵約束,set foreign_key_checks=1;開啟約束。
本文轉自: http://www.linux78.com/innodb-storage-engine.html
Linux起點
相關文章
- MyISAM 儲存引擎,Innodb 儲存引擎儲存引擎
- InnoDB儲存引擎——表儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- InnoDB儲存引擎簡介儲存引擎
- InnoDB儲存引擎檔案儲存引擎
- Mysql技術內幕InnoDB儲存引擎讀書筆記--《二》InnoDB儲存引擎MySql儲存引擎筆記
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- InnoDB儲存引擎——兩次寫儲存引擎
- InnoDB儲存引擎——記憶體儲存引擎記憶體
- InnoDB儲存引擎——Checkpoint技術儲存引擎
- InnoDB儲存引擎——插入緩衝儲存引擎
- InnoDB儲存引擎——非同步IO儲存引擎非同步
- 你真的瞭解Innodb儲存引擎?儲存引擎
- InnoDB儲存引擎MVCC實現原理儲存引擎MVC
- 14.1 InnoDB 儲存引擎介紹儲存引擎
- innodb儲存引擎備份工具--Xtrabackup儲存引擎
- 第二章 InnoDB儲存引擎儲存引擎
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- InnoDB儲存引擎鎖機制(一、案例)儲存引擎
- innodb儲存引擎鎖的實現(一)儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- InnoDB儲存引擎——後臺執行緒儲存引擎執行緒
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- MySQL技術內幕:InnoDB儲存引擎MySql儲存引擎
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- MyISAM與innoDB儲存引擎有何差別儲存引擎
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- InnoDB儲存引擎——Master Thread工作方式儲存引擎ASTthread
- InnoDB儲存引擎——自適應雜湊索引儲存引擎索引
- MySQL儲存引擎MyISAM與InnoDB的優劣MySql儲存引擎
- Mysql核心:INNODB儲存引擎--《十一》Insert BufferMySql儲存引擎
- MySQL核心InnoDB儲存引擎(卷1)筆記MySql儲存引擎筆記
- Mysql innodb儲存引擎的效能最佳化MySql儲存引擎
- 總結MySQL儲存引擎MyISAM與InnoDB區別MySql儲存引擎
- 十八、Mysql儲存引擎並不只有MyISAM、InnoDB——精髓MySql儲存引擎
- MySQL高階10-InnoDB引擎儲存架構MySql架構
- MySQL 5.6 InnoDB儲存引擎體系結構圖MySql儲存引擎