mysql的兩大資料庫引擎(mysql三大引擎)

本文目錄一覽:

Mysql資料庫3種存儲引擎有什麼區別?

Mysql資料庫3種存儲(MyISAM、MEMORY、InnoDB)引擎區別:

1、Myisam是Mysql的默認存儲引擎,當create創建新表時,未指定新表的存儲引擎時,默認使用Myisam。MEMORY、InnoDB不是默認存儲引擎。

2、InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比Myisam的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留數據和索引。

Mysql資料庫3種存儲(MyISAM、MEMORY、InnoDB)區別對比:

1、MyISAM

它不支持事務,也不支持外鍵,尤其是訪問速度快,對事務完整性沒有要求或者以SELECT、INSERT為主的應用基本都可以使用這個引擎來創建表。

數據文件和索引文件可以放置在不同的目錄,平均分配IO,獲取更快的速度。要指定數據文件和索引文件的路徑,需要在創建表的時候通過DATA DIRECTORY和INDEX DIRECTORY語句指定,文件路徑需要使用絕對路徑。

2、MEMORY

memory使用存在內存中的內容來創建表。每個MEMORY表實際對應一個磁碟文件,格式是.frm。MEMORY類型的表訪問非常快,因為它到數據是放在內存中的,並且默認使用HASH索引,但是一旦伺服器關閉,表中的數據就會丟失,但表還會繼續存在。

默認情況下,memory數據表使用散列索引,利用這種索引進行「相等比較」非常快,但是對「範圍比較」的速度就慢多了。因此,散列索引值適合使用在”=”和”=”的操作符中,不適合使用在””或””操作符中,也同樣不適合用在order by字句里。如果確實要使用””或””或betwen操作符,可以使用btree索引來加快速度。

存儲在MEMORY數據表裡的數據行使用的是長度不變的格式,因此加快處理速度,這意味著不能使用BLOB和TEXT這樣的長度可變的數據類型。VARCHAR是一種長度可變的類型,但因為它在MySQL內部當作長度固定不變的CHAR類型,所以可以使用。

3、InnoDB

InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM的存儲引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留數據和索引。

(1)自動增長列:

InnoDB表的自動增長列可以手工插入,但是插入的如果是空或0,則實際插入到則是自動增長後到值。可以通過”ALTER TABLE…AUTO_INCREMENT=n;”語句強制設置自動增長值的起始值,默認為1,但是該強制到默認值是保存在內存中,資料庫重啟後該值將會丟失。

可以使用LAST_INSERT_ID()查詢當前線程最後插入記錄使用的值。如果一次插入多條記錄,那麼返回的是第一條記錄使用的自動增長值。對於InnoDB表,自動增長列必須是索引。如果是組合索引,也必須是組合索引的第一列,但是對於MyISAM表,自動增長列可以是組合索引的其他列,這樣插入記錄後,自動增長列是按照組合索引到前面幾列排序後遞增的。

(2)外鍵約束:

MySQL支持外鍵的存儲引擎只有InnoDB,在創建外鍵的時候,父表必須有對應的索引,子表在創建外鍵的時候也會自動創建對應的索引。

資料庫(mysql)關鍵知識

Mysql是目前互聯網使用最廣的關係資料庫,關係資料庫的本質是將問題分解為多個分類然後通過關係來查詢。 一個經典的問題是用戶借書,三張表,一個用戶,一個書,一個借書的關係表。當需要查詢某個用戶借書情況或者是書被那些人借了,就用關係查詢來實現。

關係資料庫範式

來自英文Normal form,簡稱NF。要想設計—個好的關係,必須使關係滿足一定的約束條件,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。總共有六種範式:第一範式(1NF)、第二範式(2NF)、 第三範式 (3NF)、巴斯-科德範式(BCNF)、 第四範式 (4NF)和 第五範式 (5NF,又稱完美範式)。

1NF是指資料庫表的每一列都是不可分割的原子數據項。2NF必須滿足1NF,要求資料庫表中的每行記錄必須可以被唯一地區分。3NF在2NF基礎上,任何非主 屬性 不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)。BCNF是在3NF基礎上,任何非主屬性不能對主鍵子集依賴(在3NF基礎上消除對主碼子集的依賴), 滿足BCNF不再會有任何由於函數依賴導致的異常,但是我們還可能會遇到由於多值依賴導致的異常。4NF的定義很簡單:已經是BC範式,並且不包含多值依賴關係。5NF處理的是無損連接問題,這個範式基本沒有實際意義,因為無損連接很少出現,而且難以察覺。而域鍵範式試圖定義一個終極範式,該範式考慮所有的依賴和約束類型,但是實用價值也是最小的,只存在理論研究中。

Catalog和Schema

是資料庫對象命名空間中的層次,主要用來解決命名衝突的問題。從概念上說,一個資料庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schema又包含多個資料庫對象(表、視圖、欄位等)。但是Mysql的資料庫名就是Schema,不支持Catalog。

Mysql的資料庫引擎主要有兩種MyISAM和InnoDB,MyISAM支持全文檢索,InnoDB支持事務。

SQL中的通配符『%』代表任意字元出現任意次數。『_』代表任意字元出現一次。SQL與正則表達式結合查詢一般用在WHERE table_name REGEXP ‘^12.34’。子查詢是從裡到外執行。

資料庫聯結(join)涉及到外鍵,外鍵是指一個表的列是另一個表的主鍵,那麼它就是外鍵。笛卡爾積聯結(不指定聯結條件時)生成的記錄條目是單純的第一個表的行乘以第二個表的列數。用得最多的是等值聯結也叫內部聯結。

高級聯結還有自連接,是指查詢中的兩張表是同一張表,它通常作為外部語句用來代替從相同表中檢索數據時使用的子查詢。自然聯結使每個列只返回一次。外部聯結是指聯結包含了那些在相關表中沒有關聯行的行。例如列出所有產品及其訂購數量,包括沒有人訂購的產品。LEFT OUTER JOIN指選擇左邊表的所有行。

組合查詢是指採用UNION等將兩個查詢結果取並集。

視圖是查看存儲在別處的數據的一種工具,它本身並不包含數據,因此表的數據修改了,視圖返回的數據也將隨之修改,因此如果使用了複雜或嵌套視圖會對性能有較大的影響。視圖的作用之一是隱藏複雜的SQL通常會涉及到聯結查詢。

存儲過程類似於批處理,包含了一條或多條SQL語句。語法:

CREATE PROCEDURE name()

BEGIN

SQL

END

————————-

CALL name()//來調用存儲過程

游標有DECLARE定義,游標與存儲過程是綁定的,存儲過程處理完成,游標就會消失。游標被打開後可以使用FETCH語句訪問每一行。

觸發器是在某個時間發生時自動執行某條SQL語句。語法:

CREATE TRIGGER name AFTER INSERT ON talbe_name FOR EACH ROW

事務處理可以維護資料庫的完整性,保證批量的操作要麼完全執行,要麼完全不執行。包括事務、回退、提交、保留點幾個關鍵術語。ROLLBACK只能在一個事務處理內使用。他不能回退CREATE和DROP操作。使用COMMIT保證事務提交。複雜的事務處理需要部分提交或回退,因此我們需要使用保留點SAVEPOINT。可以使用ROLLBACK TO savepoint_name。保留點越多越好。保留點在事務執行完成後自動釋放。

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 可能是最著名的 關係資料庫管理系統 (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 查詢設置和修改表引擎。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/300873.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-29 14:18
下一篇 2024-12-29 14:18

相關推薦

  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Java2D物理引擎簡介及應用

    本文將介紹Java2D物理引擎的基本概念、實現原理及應用案例,以及對應代碼示例。 一、物理引擎概述 物理引擎是一種計算機程序,用於模擬物理系統中的對象和其互動,如重力、碰撞、彈力等…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • Think-ORM數據模型及資料庫核心操作

    本文主要介紹Think-ORM數據模型建立和資料庫核心操作。 一、模型定義 Think-ORM是一個開源的ORM框架,用於簡化在PHP應用中(特別是ThinkPHP)與關係資料庫之…

    編程 2025-04-27
  • 如何使用Python將CSV文件導入到資料庫

    CSV(Comma Separated Values)是一種可讀性高、易於編輯與導入導出的文件格式,常用於存儲表格數據。在數據處理過程中,我們有時需要將CSV文件導入到資料庫中進行…

    編程 2025-04-27
  • Python批量導入資料庫

    本文將介紹Python中如何批量導入資料庫。首先,對於數據分析和挖掘領域,資料庫中批量導入數據是一個必不可少的過程。這種高效的導入方式可以極大地提高數據挖掘、機器學習等任務的效率。…

    編程 2025-04-27
  • Activiti 6自動部署後不生成資料庫act_hi_*的解決方法

    本文將從多個方面詳細闡述Activiti 6自動部署後不生成資料庫act_hi_*的問題,並提供對應的代碼示例。 一、問題分析 在使用Activiti 6部署流程後,我們發現act…

    編程 2025-04-27

發表回復

登錄後才能評論