国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL 數(shù)據(jù)庫存儲引擎

這篇具有很好參考價值的文章主要介紹了MySQL 數(shù)據(jù)庫存儲引擎。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、存儲引擎簡介

二、MyISAM存儲引擎

1、MylSAM介紹

2、MyISAM表支持3種不同的存儲格式

3、MylSAM的特點

4、MyISAM使用的生產(chǎn)場景

三、InnoDB存儲引擎

1、InnoDB介紹

2、InnoDB的特點

3、InnoDB適用生產(chǎn)場景

4、MyISAM和InnoDB的區(qū)別

四、查看和修改存儲引擎

1、查看系統(tǒng)支持的存儲引擎

2、?查看數(shù)據(jù)表使用的存儲引擎

3、修改存儲引擎?

五、InnoDB行鎖與索引的關系

1、?行級鎖定與表級鎖定

2、死鎖

3、如何盡可能避免死鎖

六、總結

1、MyISAM和InnoDB的區(qū)別

2、查看表使用的存儲引擎

3、修改存儲引擎


一、存儲引擎簡介

? ? ? ?MySQL中的數(shù)據(jù)用各種不同的技術存儲在文件(或者內(nèi)存)中。這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。 存儲引擎說白了就是如何存儲數(shù)據(jù)、如何為存儲的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術的實現(xiàn)方法。

? ? ? ?例如,如果你在研究大量的臨時數(shù)據(jù),你也許需要使用內(nèi)存存儲引擎。內(nèi)存存儲引擎能夠在內(nèi)存中存儲所有的表格數(shù)據(jù)。又或者,你也許需要一個支持事務處理的數(shù)據(jù)庫(以確保事務處理不成功時數(shù)據(jù)的回退能力)。

? ? ? ?mysql常用的存儲引擎有:MyISAM、InnoDB(注意:一個表只能使用一個存儲引擎,一個庫中不同的表可以使用不同的存儲引擎。)

二、MyISAM存儲引擎

1、MylSAM介紹

? ? ? ?MyISAM是MySql默認的存儲引擎,不支持外鍵和事務,優(yōu)勢是訪問速度快.以select和insert為主的應用以這個存儲引擎創(chuàng)建表尤佳。

? ? ? ?它在磁盤上包含三個文件,一個是存儲表定義的.frm文件,存儲數(shù)據(jù)的MYData后綴為.MYD文件和存儲索引的MYIndex后綴為.MYI文件。

2、MyISAM表支持3種不同的存儲格式

  1. 靜態(tài)表:因為其字段的長度都是固定的,所以相對會占空間,會用空格,但是由于長度固定存儲非???。
  2. 動態(tài)表:變長字段的存儲固然較少空間,但頻繁的更新刪除會產(chǎn)生空間碎片。
  3. 壓縮表:每個記錄都進行了單獨壓縮,占據(jù)非常小的空間。

3、MylSAM的特點

表級鎖定形式,數(shù)據(jù)在更新時鎖定整個表。

數(shù)據(jù)庫在讀寫過程中相互阻塞:

  • 會在數(shù)據(jù)寫入的過程阻塞用戶數(shù)據(jù)的讀取
  • 也會在數(shù)據(jù)讀取的過程中阻塞用戶的數(shù)據(jù)寫入

數(shù)據(jù)單獨寫入或讀取,速度過程較快且占用資源相對少。

4、MyISAM使用的生產(chǎn)場景

  1. 公司業(yè)務不需要事務的支持
  2. 單方面讀取或寫入數(shù)據(jù)比較多的業(yè)務
  3. MylSAM存儲引擎數(shù)據(jù)讀寫都比較頻繁場景不適合(因為讀寫是互相阻塞的)
  4. 使用讀寫并發(fā)訪問相對較低的業(yè)務
  5. 數(shù)據(jù)修改相對較少的業(yè)務
  6. 對數(shù)據(jù)業(yè)務-致性要求不是非常高的業(yè)務
  7. 服務器硬件資源相對比較差(MyISAM占用資源相對少)

三、InnoDB存儲引擎

1、InnoDB介紹

? ? ? ?InnoDB 是 MySQL 上第一個提供外鍵約束的引擎,除了提供事務處理外,InnoDB 還支持行鎖,提供和 Oracle 一樣的一致性的不加鎖讀取,能增加并發(fā)讀的用戶數(shù)量并提高性能,不會增加鎖的數(shù)量。
InnoDB 的設計目標是處理大容量數(shù)據(jù)時最大化性能,它的 CPU 利用率是其他所有基于磁盤的關系數(shù)據(jù)庫引擎中最有效率的。

? ? ? ?InnoDB 是一套放在 MySQL 后臺的完整數(shù)據(jù)庫系統(tǒng),InnoDB 有它自己的緩沖池,能緩沖數(shù)據(jù)和索引,InnoDB 還把數(shù)據(jù)和索引存放在表空間里面,可能包含好幾個文件,這和 MyISAM 表完全不同,在 MyISAM 中,表被存放在單獨的文件中,InnoDB 表的大小只受限于操作系統(tǒng)文件的大小,一般為 2GB。

2、InnoDB的特點

  1. InnoDB中不保存表的行數(shù),如select count(*)from table;時,InnoDB需要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數(shù)即可。需要注意的是當count(*)語句包含where條件時MyISAM也需要掃描整個表。
  2. 對于自增長的字段,InnoDB 中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立組合索引。
  3. delete清空整個表時,InnoDB 是一行一 行的刪除,效率非常慢。MyISAM則會重建表。

3、InnoDB適用生產(chǎn)場景

  1. 業(yè)務需要事務的支持。

  2. 行級鎖定對高并發(fā)有很好的適應能力,但需確保查詢是通過索引來完成。

  3. 業(yè)務數(shù)據(jù)更新較為頻繁的場景。如:論壇,微博等。

  4. 業(yè)務數(shù)據(jù)一致性要求較高。如:銀行業(yè)務。

  5. 硬件設備內(nèi)存較大,利用InnoDB較好的緩存能力來提高內(nèi)存利用率,減少磁盤IO的壓力。

4、MyISAM和InnoDB的區(qū)別

MyISAM: 不支持事務和外鍵約束,占用空間較小,訪問速度快,表級鎖定,適用于不需要事務處理、單獨寫入或查詢的應用場景。(寫入和查詢不一起使用的場景)

InnoDB: 支持事務處理、外鍵約束、占用空間比MyISAM 大,支持行級鎖定,讀寫開發(fā)能力較好,適用于需要事務處理、讀寫頻繁的應用場景。

四、查看和修改存儲引擎

1、查看系統(tǒng)支持的存儲引擎

show engines;

#Engine:存儲引擎的名稱。 ?? ?

#Support:YES表示引擎受支持且處于活動狀態(tài),NO表示不支持,DEFAULT表示默認存儲引擎。DISABLED表示支持引擎但已將其禁用。 ?? ?

#Comment:存儲引擎的簡要說明。 ?? ?

#Transactions:存儲引擎是否支持事務。 ?? ?

#XA:存儲引擎是否支持XA事務。 ?? ?

#Savepoints:存儲引擎是否支持回滾點(標記點)。

MySQL 數(shù)據(jù)庫存儲引擎

2、?查看數(shù)據(jù)表使用的存儲引擎

方法一:

show table status from 庫名 where name='表名'\G

MySQL 數(shù)據(jù)庫存儲引擎

方法二:?

use 庫名; ?

show create table 表名;

MySQL 數(shù)據(jù)庫存儲引擎

3、修改存儲引擎?

方法一:alter table修改

修改當前數(shù)據(jù)表使用的存儲引擎。

use 庫名; ?

alter table 表名 engine=存儲引擎名稱;

示例:

use uma; ?

alter table week?engine=MyISAM; ? #將class表的存儲引擎修改為MyISAM

MySQL 數(shù)據(jù)庫存儲引擎

注:MyISAM不支持外鍵約束,如果數(shù)據(jù)表設置了外鍵,則無法修改為MyISAM

方法二:修改配置文件,指定默認存儲引擎

注:此方法只對修改配置文件并重啟mysql服務之后新創(chuàng)建的表有效,已經(jīng)存在的表不會有變更。

創(chuàng)建數(shù)據(jù)表時如果沒有指定存儲引擎,則會使用默認存儲引擎。

vim /etc/my.cnf ?

...... ?

[mysqld] ?

default-storage-engine=InnoDB ? #修改這一行,指定默認存儲引擎為InnoDB ?? ?

systemctl restart mysqld ? #重啟服務

MySQL 數(shù)據(jù)庫存儲引擎

方法三:?create table 創(chuàng)建表時指定存儲引擎

use 庫名; ?

create table 表名(字段1 數(shù)據(jù)類型,...) ?engine=存儲引擎名稱;

示例:

use uma; ?

create table litang(id int,name varchar(10)) engine=MyISAM;

MySQL 數(shù)據(jù)庫存儲引擎

五、InnoDB行鎖與索引的關系

準備一個數(shù)據(jù)表tt5:

create table tt5(id int primary key,name char(10),age int);

?

insert into tt5 values(1,'aaa',22); ?

insert into tt5 values(2,'bbb',23); ?

insert into tt5 values(3,'aaa',24); ?

insert into tt5 values(4,'bbb',25); ?

insert into tt5 values(5,'ccc',26); ?

insert into tt5 values(6,'zzz',27);

?

alter table tt5 add index name_index(name); ? #對name字段創(chuàng)建普通索引

MySQL 數(shù)據(jù)庫存儲引擎

1、?行級鎖定與表級鎖定

InnoDB行鎖是通過給索引項加鎖來實現(xiàn)的,如果沒有索引,InnoDB將通過隱藏的聚簇索引來對記錄加鎖。

1)delete from t1 where id=1;

因為id字段是主鍵,Innodb對于主鍵使用了聚簇索引,刪除過程中會直接鎖住整行記錄。行級鎖定。

2)delete from t1 where name='aaa';

因為name字段是普通索引,會先鎖住索引的兩行(因為aaa有兩行),接著會鎖住相應主鍵對應的記錄。行級鎖定。

3)delete from t1 where age=23;

因為age字段沒有索引,會使用全表掃描過濾,這時表上的各個記錄都將加上鎖。表級鎖定。

2、死鎖

死鎖一般是事務相互等待對方資源,最后形成環(huán)路造成的。

session1 session2
begin; begin;

delete from tt5?where id=5;#事務結束前,id=5的行會被鎖定

select * from tt5 where id=1 for update; #加排他鎖,模擬并發(fā)情況,鎖定id=1的行
delete from tt5 where id=1; #死鎖產(chǎn)生
update tt5 set name='abc' where id=5; #死鎖產(chǎn)生。因為會話1中id=5的行還在刪除過程中,該行已被鎖定
rollback; #回滾,結束事務。id=5的行被解鎖
update tt5 set name='abc' where id=5; #成功更新數(shù)據(jù)

for update:?可以為數(shù)據(jù)庫中的行上一個排它鎖。當一個事務的操作未完成時,其他事務可以讀取該行數(shù)據(jù),但是不能寫入、更新或刪除。

演示:

會話1:MySQL 數(shù)據(jù)庫存儲引擎會話2:MySQL 數(shù)據(jù)庫存儲引擎會話1:MySQL 數(shù)據(jù)庫存儲引擎會話2:MySQL 數(shù)據(jù)庫存儲引擎會話1:MySQL 數(shù)據(jù)庫存儲引擎會話2:MySQL 數(shù)據(jù)庫存儲引擎

3、如何盡可能避免死鎖

  1. 使用更合理的業(yè)務邏輯,以固定的順序訪問表和行。
  2. 大事務拆小。大事務更傾向于死鎖,如果業(yè)務允許,將大事務拆小。
  3. 在同一個事務中,盡可能做到一次鎖定所需要的所有資源,減少死鎖概率。
  4. 降低隔離級別。如果業(yè)務允許,將隔離級別調(diào)低也是較好的選擇,比如將隔離級別從RR調(diào)整為RC,可以避免掉很多因為gap鎖造成的死鎖。
  5. 為表添加合理的索引。如果不使用索引將會為表的每一行記錄添加上鎖,死鎖的概率大大增加。

六、總結

1、MyISAM和InnoDB的區(qū)別

MyISAM: 不支持事務和外鍵約束,占用空間較小,訪問速度快,表級鎖定,適用于不需要事務處理、單獨寫入或查詢的應用場景。(寫入和查詢不一起使用的場景)

InnoDB: 支持事務處理、外鍵約束、占用空間比MyISAM 大,支持行級鎖定,讀寫開發(fā)能力較好,適用于需要事務處理、讀寫頻繁的應用場景。

2、查看表使用的存儲引擎

方法一:show table status from 庫名 where name='表名'\G

方法二:show create table 表名;

3、修改存儲引擎

方法一:修改已存在的表使用的存儲引擎

alter table 表名 engine=存儲引擎名稱;

方法二:修改配置文件,指定默認存儲引擎

vim /etc/my.cnf

[mysqld]

default-storage-engine=InnoDB #修改這一行,指定默認存儲引擎為InnoDB

systemctl restart mysqld #重啟服務

方法三:創(chuàng)建表時指定存儲引擎

create table 表名(字段1 數(shù)據(jù)類型,...) engine=存儲引擎名稱;文章來源地址http://www.zghlxwxcb.cn/news/detail-424459.html

到了這里,關于MySQL 數(shù)據(jù)庫存儲引擎的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SQL Server存儲過程(數(shù)據(jù)庫引擎)使用詳解

    SQL Server存儲過程(數(shù)據(jù)庫引擎)使用詳解

    SQL Server 中的存儲過程是一組一個或多個 Transact-SQL 語句的引用。過程類似于其他編程語言中的構造,因為它們可以: 接受輸入?yún)?shù)并以輸出參數(shù)的形式向調(diào)用程序返回多個值。 包含在數(shù)據(jù)庫中執(zhí)行操作的編程語句。其中包括調(diào)用其他過程。 向調(diào)用程序返回狀態(tài)值,以指示成

    2023年04月09日
    瀏覽(17)
  • mysql數(shù)據(jù)庫數(shù)據(jù)如何遷移目錄

    mysql數(shù)據(jù)庫數(shù)據(jù)如何遷移目錄

    默認位置 C:ProgramDataMySQLMySQL Server 8.0 步驟2中Data文件夾就是mysql存放數(shù)據(jù)的位置 這里舉例移動到E盤下 原來my.ini文件不要修改文件位置,如果修改需要另行學習

    2024年02月07日
    瀏覽(101)
  • mysql 數(shù)據(jù)庫引擎介紹

    mysql 數(shù)據(jù)庫引擎介紹

    一、數(shù)據(jù)庫引擎 ? ? 數(shù)據(jù)庫引擎是用于存儲、處理和保護數(shù)據(jù)的核心服務。利用數(shù)據(jù)庫引擎可控制訪問權限并快速處理事務,從而滿足企業(yè)內(nèi)大多數(shù)需要處理大量數(shù)據(jù)的應用程序的要求。 使用數(shù)據(jù)庫引擎創(chuàng)建用于聯(lián)機事務處理或聯(lián)機分析處理數(shù)據(jù)的關系數(shù)據(jù)庫。這包括創(chuàng)建

    2024年02月14日
    瀏覽(89)
  • MySQL的數(shù)據(jù)庫引擎介紹

    MySQL的數(shù)據(jù)庫引擎介紹

    ? ? 數(shù)據(jù)庫引擎就是操作數(shù)據(jù)庫的一段程序或程序段,用于存儲、處理和保護數(shù)據(jù)的核心服務。 ????利用數(shù)據(jù)庫引擎可控制訪問權限并快速處理事務,從而滿足企業(yè)內(nèi)大多數(shù)需要處理大量數(shù)據(jù)的應用程序的要求。數(shù)據(jù)庫應用項目是通過數(shù)據(jù)庫引擎與數(shù)據(jù)庫鏈接的。 ? ? 何為

    2024年02月06日
    瀏覽(97)
  • mysql數(shù)據(jù)庫簡介

    ? MySQL數(shù)據(jù)庫的安裝和卸載 MySQL數(shù)據(jù)庫概念 SQL語言(操作數(shù)據(jù)庫) SQL的分類 數(shù)據(jù)庫的操作(CURD) 創(chuàng)建數(shù)據(jù)庫(重點) 查看數(shù)據(jù)庫(重點) 刪除數(shù)據(jù)庫(重點) 修改數(shù)據(jù)庫 表結構操作(CURD) 創(chuàng)建表 數(shù)據(jù)庫的數(shù)據(jù)類型(重點) 單表的約束(了解) 刪除和查看表 修改表 ?

    2023年04月13日
    瀏覽(30)
  • Mysql實現(xiàn)Linux下數(shù)據(jù)庫目錄遷移

    Centos中遷移Mysql的數(shù)據(jù)目錄,一般是硬盤滿了不夠用,然后掛載了新的數(shù)據(jù)盤,那么就可以將Mysql數(shù)據(jù)遷移到新的數(shù)據(jù)盤。 可以查看pid后kill停止,可以進入目錄stop,可以變量停止 復制當前目錄到新目錄 更改mysql數(shù)據(jù)存儲路徑

    2024年02月12日
    瀏覽(31)
  • 頭歌MySQL數(shù)據(jù)庫實訓答案 有目錄

    頭歌MySQL數(shù)據(jù)庫答案 特別感謝黃副班、小青提供代碼,有問題聯(lián)系公眾號【學思則安】留言更正 其他作業(yè)鏈接 數(shù)據(jù)庫1-MySQL數(shù)據(jù)定義與操作實戰(zhàn) MySQL數(shù)據(jù)庫 - 初識MySQL MySQL數(shù)據(jù)庫 - 數(shù)據(jù)庫和表的基本操作(一) MySQL數(shù)據(jù)庫 - 數(shù)據(jù)庫和表的基本操作(二) MySQL數(shù)據(jù)庫 - 單表查詢

    2024年04月28日
    瀏覽(358)
  • 【MySQL 數(shù)據(jù)庫】9、存儲過程

    【MySQL 數(shù)據(jù)庫】9、存儲過程

    ?? 存儲過程是事先經(jīng)過編譯并存儲在數(shù)據(jù)庫中的 SQL 語句的集合,調(diào)用存儲過程可以簡化應用開發(fā)人員的很多工作,減少數(shù)據(jù)在數(shù)據(jù)庫和應用服務器之間的傳輸,可以提高數(shù)據(jù)處理效率 ?? 存儲過程思想上很簡單:就是數(shù)據(jù)庫 SQL 語言層面的代碼封裝與重用 ?? 【封裝,復用

    2024年02月08日
    瀏覽(32)
  • 數(shù)據(jù)庫(MySQL)的存儲過程

    數(shù)據(jù)庫(MySQL)的存儲過程

    存儲過程是事先經(jīng)過編譯并存儲在數(shù)據(jù)庫中的一段SQL 語句的集合,調(diào)用存儲過程可以簡化應用開發(fā)人員的很多工作,減少數(shù)據(jù)在數(shù)據(jù)庫和應用服務器之間的傳輸,對于提高數(shù)據(jù)處理的效率是有好處的。 存儲過程思想上很簡單,就是數(shù)據(jù)庫SQL 語言層面的代碼封裝與重用。 特點

    2024年02月10日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包