MySQL 可能是最著名的 關系資料庫管理系統 (RDBMS),作為一款免費開源軟體開發,最初由 MYSQL AB 公司提供支持,但現在歸 Oracle 所有。
在 MySQL 中,用於表的「存儲引擎」決定了數據的處理方式。有幾種可用的存儲引擎,但最常用的是 InnoDB 和 MyISAM 。
在本文中,我們將了解它們的顯著特徵以及它們之間的主要區別。
在本教程中,您將學習:
在我們討論兩個主要 MySQL 存儲引擎之間的特性和區別之前,先來了解一下什麼是存儲引擎?
存儲引擎,也稱為「 表處理程序 」,基本上是解釋和管理與資料庫表的 SQL 查詢相關的操作的資料庫部分。
在最新版本的 MySQL 中,可以使用「 可插拔 」架構來組織和管理存儲引擎,存在多種存儲引擎,但最常用的兩個是 InnoDB 和 MyISAM 。
要獲得我們正在使用的資料庫中可用存儲引擎的列表,我們所要做的就是發出一個簡單的 SQL 查詢,因此我們需要做的第一件事就是打開一個 MySQL 互動式提示並使用資料庫用戶登錄及其密碼:
如果登錄成功,提示將變為mysql>,在這里,我們可以運行我們的 SQL 查詢來可視化可用的存儲引擎:
執行查詢後,我們應該獲得類似於以下內容的結果:
在上表中,作為查詢結果生成,我們可以通過查看Support每行列中的值輕鬆了解支持哪些存儲引擎,「YES」值表示存儲引擎可用,否則「NO」。相反,同一列中的「DEFAULT」值表示相應的引擎(在本例中為 InnoDB)是伺服器使用的默認引擎。
「 Transactions 」和「 Savepoints 」列中存在的值分別表示存儲引擎是否支持事務和回滾。正如我們通過查看錶可以看到的,只有 InnoDB 引擎可以。
關於存儲引擎的信息存在於「 INFORMATION_SCHEMA 」資料庫的「 ENGINES 」表中,因此我們也可以發出標準的「SELECT」查詢來獲取我們需要的數據:
我們將獲得與上面看到的相同的結果。
讓我們看看兩個最常用的存儲引擎 InnoDB 和 MyISAM 之間的主要特性和區別是什麼。
正如我們已經說過的, InnoDB 是自 MySQL 以來的默認存儲引擎5.5。
此存儲引擎的一些主要功能如下:
對事務的支持提供了一種安全的方式來執行多個查詢以保持數據一致。
當多個修改數據的操作被執行並且我們想要確保它們只有在所有操作都成功並且沒有錯誤發生時才有效時,我們想要使用事務。
典型的處理方式是啟動事務並執行查詢:如果出現錯誤,則執行回滾,否則提交更改。
當使用 InnoDB 數據鎖定發生在行級別時,因此在事務期間鎖定的數據量是有限的。
InnoDB 有兩種類型的鎖:
一個共享鎖允許誰擁有它讀取該行的交易,而一個排它鎖允許交易執行其修改行的操作,所以要更新或刪除數據。
當一個事務在某行上獲得共享鎖,而另一個事務需要相同的鎖類型時,立即授予;但是,如果第二個事務在同一行上請求排他鎖,它將不得不等待。
如果第一個事務持有該行的排他鎖,則第二個事務將不得不等待該鎖被釋放以獲得共享鎖或排他鎖。
外鍵是一個非常重要的特性,因為它們可用於基於表之間的邏輯關系來強制執行數據完整性。想像一下,我們的資料庫中有三個表(假設它被稱為「testdb」):一個user包含現有用戶的job表,一個注冊所有可用作業的user_job表,以及一個用於表示用戶和用戶之間存在的多對多關系的表。作業(一個用戶可以有多個作業,多個作業可以與同一個用戶關聯)。
該user_job表就是所謂的連接表或關聯表,因為它的唯一目的是表示用戶-工作關聯。該表有兩列,一個叫user_id和其他job id。表中會存在兩個外鍵約束,強制執行以下規則:user_id列中的值只能引用表id列中的值,列中的user值job_id必須引用表id列中的現有值job.
這將強制執行完整性,因為僅允許現有用戶和作業的 ID 存在於關聯表中。刪除涉及表中一個或多個關聯的用戶或作業user_job也是不允許的,除非為相應的外鍵設置了CASCADE DELETE規則。在這種情況下,當刪除用戶或作業時,它們所涉及的關系也將被刪除。
MyISAM 曾經是默認的 MySQL 存儲引擎,但已被 InnoDB 取代。使用此引擎時,數據鎖定發生在表級別,因此執行操作時鎖定的數據更多。
與 InnoDB 不同,MyISAM 不支持事務回滾和提交,因此必須手動執行回滾。MyISAM 和 InnoDB 之間的另一個很大區別是前者不支持外鍵。MyISAM 更簡單,並且在對有限數據集進行讀取密集型操作時可能具有優勢(有爭議)。
在表上使用 MyISAM 時,會設置一個標志,指示該表是否需要修復,例如在突然關閉之後。稍後可以使用適當的工具執行表修復。
如何知道特定表使用了什麼存儲引擎?我們所要做的就是發出一個簡單的查詢。
例如,要知道user我們在前面的例子中提到的表使用了什麼存儲引擎,我們將運行:
注意上面的查詢我們使用了G,為了讓查詢結果垂直顯示,優化空間。執行查詢後,我們將獲得以下結果:
在這種情況下,通過查看「Engine」列中存儲的值,我們可以清楚地看到該表使用的是「InnoDB」引擎。獲取相同信息的另一種方法是INFORMATION_SCHEMA.TABLES直接查詢表:
上面的查詢將只返回表使用的引擎:
如果我們稍微更改查詢,我們可以獲得資料庫中所有表名的列表以及它們使用的引擎:
如果我們要為一個表設置一個特定的存儲引擎,我們可以在創建時指定它。例如,假設我們正在創建job表,並且出於某種原因我們想要使用 MyISAM 存儲引擎。我們將發出以下 SQL 查詢:
相反,如果我們想要更改用於已存在表的存儲引擎,我們只需要使用ALTERSQL 語句。假設我們要將上一個示例中創建的「job」表所使用的存儲引擎更改為 InnoDB;我們會運行:
在本教程中,我們學習了什麼是資料庫存儲引擎,並且我們看到了兩個最常用的 MySQL 引擎的主要特性: InnoDB 和 MyISAM 。
我們看到了如何檢查哪些引擎可用、哪些引擎用於表以及如何使用 SQL 查詢設置和修改表引擎。
Ⅱ mysql的存儲引擎有哪些,有什麼區別,適用場景
MyISAM、InnoDB、Heap(Memory)、NDB
貌似一般都是使用 InnoDB的,
mysql的存儲引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事務安全表,其他存儲引擎都是非事務安全表。
最常使用的2種存儲引擎:
1.Myisam是Mysql的默認存儲引擎,當create創建新表時,未指定新表的存儲引擎時,默認使用Myisam。每個MyISAM在磁碟上存儲成三個文件。文件名都和表名相同,擴展名分別是.frm(存儲表定義)、.MYD(MYData,存儲數據)、.MYI(MYIndex,存儲索引)。數據文件和索引文件可以放置在不同的目錄,平均分布io,獲得更快的速度。
2.InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留數據和索引。
不知道是不是對你有幫助
Ⅲ 如何查看MySQL的當前存儲引擎
查看MySQL當前存儲引擎的方法步驟:
查看當前表的默認存儲引擎,可以使用如下圖所示的命令。查詢之後,我們可以查看筆者這里這個表默認的存儲引擎是:InnoDB.
如果我們想知道當前MySQL提供什麼存儲引擎,可以使用如下圖所示的命令。通過查詢我們知道,筆者所安裝的MySQL提供了9種不同的存儲引擎。
如果我們想要知道當前資料庫默認的是什麼存儲引擎,可以使用如下圖所示的命令。通過查詢我們知道,筆者所安裝的MySQL默認的存儲引擎是InnoDB。
給一個新建的表指定特定的存儲引擎。
修改一個已經存在表的存儲引擎,假設這里我們想要修改「t1」表的存儲引擎。我們就可以按命令來操作。執行之後,我們的t1表的存儲引擎,就從默認的InnoDB變為了CSV.
Ⅳ 如何查看mysql的存儲引擎類型
有時的時候,我們想查看以下mysql的表的存儲引擎是什麼類型的,不用說,大家直接想到的就是使用show create table命令查看創建表的命令,從而直接認為定義表的引擎就是表的真正存儲引擎,這個方法在大多數情況下是沒有錯的,但是在有的時候卻是致命的錯誤,因為有的時候明明看的的是 engine =myisam ,怎麼會select count(*) from tbl_name 的查詢速度怎麼會真么慢呢。這種情況一般會出現在使用該創建表的存儲沒有安裝成功,從而導致表使用的時資料庫的默認存儲引擎。因此嚴格的來說查看mysql的表的存儲引擎使用show create table命令是不完全正確的。正確的方式是使用下面我介紹的兩種方式,這兩種方式查看出來的是沒有任何問題的,還請大家仔細閱讀下面的文章
正確方式一: SHOW TABLE STATUS from 資料庫庫名 where Name='表名';01.hymin@Ubuntu:/myhome$ mysql -uroot -p'mypassword'
02.Welcome to the MySQL monitor. Commands end with ; or \g.
03.Your MySQL connection id is 221
04.Server version: 5.1.41-3ubuntu12.7 (Ubuntu)05.
06.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
07.
08.mysql> SHOW TABLE STATUS from mytest where Name='test';
09.+------------+--------+---------+------------+------+----------------+-------------+(省略部分結果)
10.| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |(省略部分結果)
11.+------------+--------+---------+------------+------+----------------+-------------+(省略部分結果)
12.| test | MyISAM | 10 | Fixed | 0 | 0 | 0 |(省略部分結果)
13.+------------+--------+---------+------------+------+----------------+-------------+(省略部分結果)
14.1 row in set (0.02 sec)15.
16.mysql> 5. 正確方式二:
mysqlshow -u 資料庫登錄帳號 -p '資料庫登錄帳號密碼' --status 資料庫庫名 表名1.hymin@Ubuntu:/myhome$ mysqlshow -uroot -p'mypassword' --status mytest test
2.Database:mytest Wildcard: test
3.+------------+--------+---------+------------+------+----------------+-------------+(省略部分結果)
4.| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length |(省略部分結果)
5.+------------+--------+---------+------------+------+----------------+-------------+(省略部分結果)
6.| test | MyISAM | 10 | Fixed | 0 | 0 | 0 |(省略部分結果)
Ⅳ 如何查看MySQL的當前存儲引擎
查看當前表的默認存儲引擎,可以使用如下圖所示的命令。查詢之後,我們可以查看筆者這里這個表默認的存儲引擎是:InnoDB.
如果我們想知道當前MySQL提供什麼存儲引擎,可以使用如下圖所示的命令。通過查詢我們知道,筆者所安裝的MySQL提供了9種不同的存儲引擎。
如果我們想要知道當前資料庫默認的是什麼存儲引擎,可以使用如下圖所示的命令。通過查詢我們知道,筆者所安裝的MySQL默認的存儲引擎是InnoDB。
給一個新建的表指定特定的存儲引擎,比如我們要新建一個「t2」表,我們希望這個表的存儲引擎是MyISAM,具體操作如下圖所示。
修改一個已經存在表的存儲引擎,假設這里我們想要修改「t1」表的存儲引擎。我們就可以按下圖所示的命令來操作。執行之後,我們的t1表的存儲引擎,就從默認的InnoDB變為了CSV.
Ⅵ 如何在Linux上檢查MySQL數據表的存儲引擎類型
提問: 我想要知道我的MySQL資料庫是MyISAM還是Innodb類型。我該如何檢查MySQL資料庫表的類型?
MySQl主要使用兩種存儲引擎:MyISAM 和 Innodb。MyISAM是非事務的,因此擁有讀取更快,然而InnoDB完全支持細顆粒度的事務鎖定(比如:commit/rollback)。當你創建一張新的MySQL表時,你要選擇它的類型(也就是存儲引擎)。如果沒有選擇,你就會使用與預設置的默認引擎。
如果你想要知道已經存在的MySQL數據表的類型,這里有幾種方法達到。
InnoDB存儲引擎的啟動、關閉與恢復 http://www.linuxidc.com/Linux/2013-06/86415.htm
MySQL InnoDB獨立表空間的配置 http://www.linuxidc.com/Linux/2013-06/85760.htm
MySQL Server 層和 InnoDB 引擎層 體系結構圖 http://www.linuxidc.com/Linux/2013-05/84406.htm
InnoDB 死鎖案例解析 http://www.linuxidc.com/Linux/2013-10/91713.htm
MySQL Innodb獨立表空間的配置 http://www.linuxidc.com/Linux/2013-06/85760.htm
方法一
如果你可以訪問phpMyAdmin,你可以從phpMyAdmin找出默認的資料庫類型。從phpMyAdmin中選中資料庫來查看它的表列表。在「Type」一列的下面,你會看到每個表的數據表類型。
方法二
如果你可以直接登錄MySQL伺服器,另外一種鑒別存儲引擎的方法是登錄MySQL伺服器後運行下面的MySQL命令:
mysql> SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA ='my_database' AND TABLE_NAME ='my_table';
上面的命令會顯示在'mydatabase'資料庫中'mytable'表的引擎類型。
方法三
還有一種檢查引擎的方法是使用mysqlshow,是一種命令行下的顯示資料庫信息的工具。mysq