成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

mysql存儲引擎怎么用,MySQL存儲過程及引擎

MySQL存儲引擎之Memory

首先創(chuàng)建表

創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設(shè)計服務(wù),案例作品覆蓋成都水處理設(shè)備等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開發(fā)品質(zhì)網(wǎng)站。

我們能夠看到,表是不支持TEXT字段的

我們再看下文件系統(tǒng)

只有一個保存表結(jié)構(gòu)的文件

下面我們再看下表的索引

首先,新建兩個索引

我們查看當前索引類型

存在兩個索引,一個為默認的,一個是指定的BTree。

接下來我們查看表的狀態(tài)

Memory存儲引擎表和臨時表的區(qū)別

臨時表分兩類:系統(tǒng)使用臨時表,create temporary table 建立的臨時表。無論哪種表,只有當前session是可見的。而Memory表是所有線程都可以使用的。

系統(tǒng)使用臨時表又分為兩類:查過限制使用Myisam臨時表,未超過限制使用Memory表。

使用場景

注意一點是:Memory數(shù)據(jù)易丟失,所以要求數(shù)據(jù)可再生

memory存儲引擎是MySQL中的一類特殊的存儲引擎。其使用存儲在內(nèi)存中的內(nèi)容來創(chuàng)建表,而且所有數(shù)據(jù)也放在內(nèi)存中。這些特性都與InnoDB,MyISAM存儲引擎不同。

OK,這里我們講解一些memory存儲引擎的文件存儲形式,索引類型,存儲周期和優(yōu)缺點。

每個基于memory存儲引擎的表實際對應(yīng)一個磁盤文件,該文件的文件名與表名相同,類型為frm類型。該文件只存儲表的結(jié)構(gòu),而其數(shù)據(jù)文件,都是存儲在內(nèi)存中的,這樣有利于對數(shù)據(jù)的快速的處理,提高整個表的處理效率。

值得注意的是:服務(wù)器需要有足夠的內(nèi)存來維持memory存儲引擎的表的使用。如果不需要了,可以釋放這些內(nèi)存,甚至可以刪除不需要的表。

Memory存儲引擎默認使用哈希(HASH)索引,其速度比使用B型樹(BTREE)索引快。如果我們需要使用B型樹索引,可以在創(chuàng)建索引時選擇使用。

這里來整理一個小的技巧:

Memory存儲引擎通常很少用到,至少我是沒有用到過。因為Memory表的所有數(shù)據(jù)都是存儲在內(nèi)存上的,如果內(nèi)存出現(xiàn)異常會影響到數(shù)據(jù)的完整性。

如果重啟機器或者關(guān)機,表中的所有數(shù)據(jù)都將消失,因此,基于Memory存儲引擎的表的生命周期都比較短,一般都是一次性的。

Memory表的大小是受到限制的,表的大小主要取決于2個參數(shù),分別是max_rows和max_heap_table_size。其中,max_rows可以在創(chuàng)建表時指定,max_heap_table_size的大小默認為16MB,可以按需要進行擴大。

因此,其基于內(nèi)存中的特性,這類表的處理速度會非常快,但是,其數(shù)據(jù)易丟失,生命周期短。基于其這個缺陷,選擇Memory存儲引擎時需要特別小心。

Mysql中什么是存儲引擎

什么是存儲引擎?

關(guān)系數(shù)據(jù)庫表是用于存儲和組織信息的數(shù)據(jù)結(jié)構(gòu),可以將表理解為由行和列組成的表格,類似于Excel的電子表格的形式。有的表簡單,有的表復(fù)雜,有的表根本不用來存儲任何長期的數(shù)據(jù),有的表讀取時非???,但是插入數(shù)據(jù)時去很差;而我們在實際開發(fā)過程中,就可能需要各種各樣的表,不同的表,就意味著存儲不同類型的數(shù)據(jù),數(shù)據(jù)的處理上也會存在著差異,那么。對于MySQL來說,它提供了很多種類型的存儲引擎,我們可以根據(jù)對數(shù)據(jù)處理的需求,選擇不同的存儲引擎,從而最大限度的利用MySQL強大的功能。這篇博文將總結(jié)和分析各個引擎的特點,以及適用場合,并不會糾結(jié)于更深層次的東西。我的學習方法是先學會用,懂得怎么用,再去知道到底是如何能用的。下面就對MySQL支持的存儲引擎進行簡單的介紹。

MyISAM

在mysql客戶端中,使用以下命令可以查看MySQL支持的引擎。

復(fù)制代碼代碼如下:

show engines;

MyISAM表是獨立于操作系統(tǒng)的,這說明可以輕松地將其從Windows服務(wù)器移植到Linux服務(wù)器;每當我們建立一個MyISAM引擎的表時,就會在本地磁盤上建立三個文件,文件名就是表明。例如,我建立了一個MyISAM引擎的tb_Demo表,那么就會生成以下三個文件:

1.tb_demo.frm,存儲表定義;

2.tb_demo.MYD,存儲數(shù)據(jù);

3.tb_demo.MYI,存儲索引。

MyISAM表無法處理事務(wù),這就意味著有事務(wù)處理需求的表,不能使用MyISAM存儲引擎。MyISAM存儲引擎特別適合在以下幾種情況下使用:

1.選擇密集型的表。MyISAM存儲引擎在篩選大量數(shù)據(jù)時非常迅速,這是它最突出的優(yōu)點。

2.插入密集型的表。MyISAM的并發(fā)插入特性允許同時選擇和插入數(shù)據(jù)。例如:MyISAM存儲引擎很適合管理郵件或Web服務(wù)器日志數(shù)據(jù)。

InnoDB

InnoDB是一個健壯的事務(wù)型存儲引擎,這種存儲引擎已經(jīng)被很多互聯(lián)網(wǎng)公司使用,為用戶操作非常大的數(shù)據(jù)存儲提供了一個強大的解決方案。我的電腦上安裝的MySQL 5.6.13版,InnoDB就是作為默認的存儲引擎。InnoDB還引入了行級鎖定和外鍵約束,在以下場合下,使用InnoDB是最理想的選擇:

1.更新密集的表。InnoDB存儲引擎特別適合處理多重并發(fā)的更新請求。

2.事務(wù)。InnoDB存儲引擎是支持事務(wù)的標準MySQL存儲引擎。

3.自動災(zāi)難恢復(fù)。與其它存儲引擎不同,InnoDB表能夠自動從災(zāi)難中恢復(fù)。

4.外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。

5.支持自動增加列AUTO_INCREMENT屬性。

一般來說,如果需要事務(wù)支持,并且有較高的并發(fā)讀取頻率,InnoDB是不錯的選擇。

MEMORY

使用MySQL Memory存儲引擎的出發(fā)點是速度。為得到最快的響應(yīng)時間,采用的邏輯存儲介質(zhì)是系統(tǒng)內(nèi)存。雖然在內(nèi)存中存儲表數(shù)據(jù)確實會提供很高的性能,但當mysqld守護進程崩潰時,所有的Memory數(shù)據(jù)都會丟失。獲得速度的同時也帶來了一些缺陷。它要求存儲在Memory數(shù)據(jù)表里的數(shù)據(jù)使用的是長度不變的格式,這意味著不能使用BLOB和TEXT這樣的長度可變的數(shù)據(jù)類型,VARCHAR是一種長度可變的類型,但因為它在MySQL內(nèi)部當做長度固定不變的CHAR類型,所以可以使用。

一般在以下幾種情況下使用Memory存儲引擎:

1.目標數(shù)據(jù)較小,而且被非常頻繁地訪問。在內(nèi)存中存放數(shù)據(jù),所以會造成內(nèi)存的使用,可以通過參數(shù)max_heap_table_size控制Memory表的大小,設(shè)置此參數(shù),就可以限制Memory表的最大大小。

2.如果數(shù)據(jù)是臨時的,而且要求必須立即可用,那么就可以存放在內(nèi)存表中。

3.存儲在Memory表中的數(shù)據(jù)如果突然丟失,不會對應(yīng)用服務(wù)產(chǎn)生實質(zhì)的負面影響。

Memory同時支持散列索引和B樹索引。B樹索引的優(yōu)于散列索引的是,可以使用部分查詢和通配查詢,也可以使用、和=等操作符方便數(shù)據(jù)挖掘。散列索引進行“相等比較”非常快,但是對“范圍比較”的速度就慢多了,因此散列索引值適合使用在=和的操作符中,不適合在或操作符中,也同樣不適合用在order by子句中。

可以在表創(chuàng)建時利用USING子句指定要使用的版本。例如:

復(fù)制代碼代碼如下:

create table users

(

id smallint unsigned not null auto_increment,

username varchar(15) not null,

pwd varchar(15) not null,

index using hash (username),

primary key (id)

)engine=memory;

上述代碼創(chuàng)建了一個表,在username字段上使用了HASH散列索引。下面的代碼就創(chuàng)建一個表,使用BTREE索引。

復(fù)制代碼代碼如下:

create table users

(

id smallint unsigned not null auto_increment,

username varchar(15) not null,

pwd varchar(15) not null,

index using btree (username),

primary key (id)

)engine=memory;

MERGE

MERGE存儲引擎是一組MyISAM表的組合,這些MyISAM表結(jié)構(gòu)必須完全相同,盡管其使用不如其它引擎突出,但是在某些情況下非常有用。說白了,Merge表就是幾個相同MyISAM表的聚合器;Merge表中并沒有數(shù)據(jù),對Merge類型的表可以進行查詢、更新、刪除操作,這些操作實際上是對內(nèi)部的MyISAM表進行操作。Merge存儲引擎的使用場景。

對于服務(wù)器日志這種信息,一般常用的存儲策略是將數(shù)據(jù)分成很多表,每個名稱與特定的時間端相關(guān)。例如:可以用12個相同的表來存儲服務(wù)器日志數(shù)據(jù),每個表用對應(yīng)各個月份的名字來命名。當有必要基于所有12個日志表的數(shù)據(jù)來生成報表,這意味著需要編寫并更新多表查詢,以反映這些表中的信息。與其編寫這些可能出現(xiàn)錯誤的查詢,不如將這些表合并起來使用一條查詢,之后再刪除Merge表,而不影響原來的數(shù)據(jù),刪除Merge表只是刪除Merge表的定義,對內(nèi)部的表沒有任何影響。

ARCHIVE

Archive是歸檔的意思,在歸檔之后很多的高級功能就不再支持了,僅僅支持最基本的插入和查詢兩種功能。在MySQL 5.5版以前,Archive是不支持索引,但是在MySQL 5.5以后的版本中就開始支持索引了。Archive擁有很好的壓縮機制,它使用zlib壓縮庫,在記錄被請求時會實時壓縮,所以它經(jīng)常被用來當做倉庫使用。

存儲引擎的一些問題

1.如何查看服務(wù)器有哪些存儲引擎可以使用?

為確定你的MySQL服務(wù)器可以用哪些存儲引擎,執(zhí)行如下命令:

復(fù)制代碼代碼如下:

show engines;

這個命令就能搞定了。

2.如何選擇合適的存儲引擎?

(1)選擇標準可以分為:

(2)是否需要支持事務(wù);

(3)是否需要使用熱備;

(4)崩潰恢復(fù):能否接受崩潰;

(5)是否需要外鍵支持;

然后按照標準,選擇對應(yīng)的存儲引擎即可。

什么是MySQL存儲引擎?

MySQL 可能是最著名的 關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS),作為一款免費開源軟件開發(fā),最初由 MYSQL AB 公司提供支持,但現(xiàn)在歸 Oracle 所有。

在 MySQL 中,用于表的“存儲引擎”決定了數(shù)據(jù)的處理方式。有幾種可用的存儲引擎,但最常用的是 InnoDB 和 MyISAM 。

在本文中,我們將了解它們的顯著特征以及它們之間的主要區(qū)別。

在本教程中,您將學習:

在我們討論兩個主要 MySQL 存儲引擎之間的特性和區(qū)別之前,先來了解一下什么是存儲引擎?

存儲引擎,也稱為“ 表處理程序 ”,基本上是解釋和管理與數(shù)據(jù)庫表的 SQL 查詢相關(guān)的操作的數(shù)據(jù)庫部分。

在最新版本的 MySQL 中,可以使用“ 可插拔 ”架構(gòu)來組織和管理存儲引擎,存在多種存儲引擎,但最常用的兩個是 InnoDB 和 MyISAM 。

要獲得我們正在使用的數(shù)據(jù)庫中可用存儲引擎的列表,我們所要做的就是發(fā)出一個簡單的 SQL 查詢,因此我們需要做的第一件事就是打開一個 MySQL 交互式提示并使用數(shù)據(jù)庫用戶登錄及其密碼:

如果登錄成功,提示將變?yōu)閙ysql,在這里,我們可以運行我們的 SQL 查詢來可視化可用的存儲引擎:

執(zhí)行查詢后,我們應(yīng)該獲得類似于以下內(nèi)容的結(jié)果:

在上表中,作為查詢結(jié)果生成,我們可以通過查看Support每行列中的值輕松了解支持哪些存儲引擎,“YES”值表示存儲引擎可用,否則“NO”。相反,同一列中的“DEFAULT”值表示相應(yīng)的引擎(在本例中為 InnoDB)是服務(wù)器使用的默認引擎。

“ Transactions ”和“ Savepoints ”列中存在的值分別表示存儲引擎是否支持事務(wù)和回滾。正如我們通過查看表可以看到的,只有 InnoDB 引擎可以。

關(guān)于存儲引擎的信息存在于“ INFORMATION_SCHEMA ”數(shù)據(jù)庫的“ ENGINES ”表中,因此我們也可以發(fā)出標準的“SELECT”查詢來獲取我們需要的數(shù)據(jù):

我們將獲得與上面看到的相同的結(jié)果。

讓我們看看兩個最常用的存儲引擎 InnoDB 和 MyISAM 之間的主要特性和區(qū)別是什么。

正如我們已經(jīng)說過的, InnoDB 是自 MySQL 以來的默認存儲引擎5.5。

此存儲引擎的一些主要功能如下:

對事務(wù)的支持提供了一種安全的方式來執(zhí)行多個查詢以保持數(shù)據(jù)一致。

當多個修改數(shù)據(jù)的操作被執(zhí)行并且我們想要確保它們只有在所有操作都成功并且沒有錯誤發(fā)生時才有效時,我們想要使用事務(wù)。

典型的處理方式是啟動事務(wù)并執(zhí)行查詢:如果出現(xiàn)錯誤,則執(zhí)行回滾,否則提交更改。

當使用 InnoDB 數(shù)據(jù)鎖定發(fā)生在行級別時,因此在事務(wù)期間鎖定的數(shù)據(jù)量是有限的。

InnoDB 有兩種類型的鎖:

一個共享鎖允許誰擁有它讀取該行的交易,而一個排它鎖允許交易執(zhí)行其修改行的操作,所以要更新或刪除數(shù)據(jù)。

當一個事務(wù)在某行上獲得共享鎖,而另一個事務(wù)需要相同的鎖類型時,立即授予;但是,如果第二個事務(wù)在同一行上請求排他鎖,它將不得不等待。

如果第一個事務(wù)持有該行的排他鎖,則第二個事務(wù)將不得不等待該鎖被釋放以獲得共享鎖或排他鎖。

外鍵是一個非常重要的特性,因為它們可用于基于表之間的邏輯關(guān)系來強制執(zhí)行數(shù)據(jù)完整性。想象一下,我們的數(shù)據(jù)庫中有三個表(假設(shè)它被稱為“testdb”):一個user包含現(xiàn)有用戶的job表,一個注冊所有可用作業(yè)的user_job表,以及一個用于表示用戶和用戶之間存在的多對多關(guān)系的表。作業(yè)(一個用戶可以有多個作業(yè),多個作業(yè)可以與同一個用戶關(guān)聯(lián))。

該user_job表就是所謂的連接表或關(guān)聯(lián)表,因為它的唯一目的是表示用戶-工作關(guān)聯(lián)。該表有兩列,一個叫user_id和其他job id。表中會存在兩個外鍵約束,強制執(zhí)行以下規(guī)則:user_id列中的值只能引用表id列中的值,列中的user值job_id必須引用表id列中的現(xiàn)有值job.

這將強制執(zhí)行完整性,因為僅允許現(xiàn)有用戶和作業(yè)的 ID 存在于關(guān)聯(lián)表中。刪除涉及表中一個或多個關(guān)聯(lián)的用戶或作業(yè)user_job也是不允許的,除非為相應(yīng)的外鍵設(shè)置了CASCADE DELETE規(guī)則。在這種情況下,當刪除用戶或作業(yè)時,它們所涉及的關(guān)系也將被刪除。

MyISAM 曾經(jīng)是默認的 MySQL 存儲引擎,但已被 InnoDB 取代。使用此引擎時,數(shù)據(jù)鎖定發(fā)生在表級別,因此執(zhí)行操作時鎖定的數(shù)據(jù)更多。

與 InnoDB 不同,MyISAM 不支持事務(wù)回滾和提交,因此必須手動執(zhí)行回滾。MyISAM 和 InnoDB 之間的另一個很大區(qū)別是前者不支持外鍵。MyISAM 更簡單,并且在對有限數(shù)據(jù)集進行讀取密集型操作時可能具有優(yōu)勢(有爭議)。

在表上使用 MyISAM 時,會設(shè)置一個標志,指示該表是否需要修復(fù),例如在突然關(guān)閉之后。稍后可以使用適當?shù)墓ぞ邎?zhí)行表修復(fù)。

如何知道特定表使用了什么存儲引擎?我們所要做的就是發(fā)出一個簡單的查詢。

例如,要知道user我們在前面的例子中提到的表使用了什么存儲引擎,我們將運行:

注意上面的查詢我們使用了G,為了讓查詢結(jié)果垂直顯示,優(yōu)化空間。執(zhí)行查詢后,我們將獲得以下結(jié)果:

在這種情況下,通過查看“Engine”列中存儲的值,我們可以清楚地看到該表使用的是“InnoDB”引擎。獲取相同信息的另一種方法是INFORMATION_SCHEMA.TABLES直接查詢表:

上面的查詢將只返回表使用的引擎:

如果我們稍微更改查詢,我們可以獲得數(shù)據(jù)庫中所有表名的列表以及它們使用的引擎:

如果我們要為一個表設(shè)置一個特定的存儲引擎,我們可以在創(chuàng)建時指定它。例如,假設(shè)我們正在創(chuàng)建job表,并且出于某種原因我們想要使用 MyISAM 存儲引擎。我們將發(fā)出以下 SQL 查詢:

相反,如果我們想要更改用于已存在表的存儲引擎,我們只需要使用ALTERSQL 語句。假設(shè)我們要將上一個示例中創(chuàng)建的“job”表所使用的存儲引擎更改為 InnoDB;我們會運行:

在本教程中,我們學習了什么是數(shù)據(jù)庫存儲引擎,并且我們看到了兩個最常用的 MySQL 引擎的主要特性: InnoDB 和 MyISAM 。

我們看到了如何檢查哪些引擎可用、哪些引擎用于表以及如何使用 SQL 查詢設(shè)置和修改表引擎。

當前標題:mysql存儲引擎怎么用,MySQL存儲過程及引擎
鏈接URL:http://jinyejixie.com/article30/dssejpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、軟件開發(fā)、網(wǎng)頁設(shè)計公司、自適應(yīng)網(wǎng)站、App開發(fā)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)
东乌| 曲阜市| 永定县| 桐庐县| 梨树县| 孝感市| 莒南县| 惠安县| 娱乐| 娱乐| 琼海市| 利川市| 嘉义市| 登封市| 玛沁县| 逊克县| 咸阳市| 潞城市| 长宁县| 湟中县| 舒兰市| 广丰县| 连平县| 五指山市| 太原市| 岳西县| 兴宁市| 禄丰县| 北安市| 资溪县| 临泉县| 农安县| 井陉县| 青河县| 蒙自县| 阳东县| 武乡县| 扎囊县| 巨野县| 体育| 富民县|