mysql事務(wù)

什么是事務(wù), 你可以百度一下。

MySQL引擎

mysql 一共有兩種引擎:Innodb和MyIASM;

Innodb引擎

Innodb引擎提供了對數(shù)據(jù)庫ACID事務(wù)的支持。并且還提供了行級鎖和外鍵的約束。它的設(shè)計的目標就是處理大數(shù)據(jù)容量的數(shù)

據(jù)庫系統(tǒng)。它本身實際上是基于Mysql后臺的完整的系統(tǒng)。Mysql運行的時候,Innodb會在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)

和索引。但是,該引擎是不支持全文搜索的。同時,啟動也比較的慢,它是不會保存表的行數(shù)的。當進行Select count(*)

from table指令的時候,需要進行掃描全表。所以當需要使用數(shù)據(jù)庫的事務(wù)時,該引擎就是首選。由于鎖的粒度小,寫操作是

不會鎖定全表的。所以在并發(fā)度較高的場景下使用會提升效率的。

MyIASM引擎

MyIASM引擎,它是MySql的默認引擎,但不提供事務(wù)的支持,也不支持行級鎖和外鍵。因此當執(zhí)行Insert插入和Update更新語

句時,即執(zhí)行寫操作的時候需要鎖定這個表。所以會導(dǎo)致效率會降低。不過和Innodb不同的是,MyIASM引擎是保存了表的

行數(shù),于是當進行Select count(*) from table語句時,可以直接的讀取已經(jīng)保存的值而不需要進行掃描全表。所以,如果表的

讀操作遠遠多于寫操作時,并且不需要事務(wù)的支持的??梢詫yIASM作為數(shù)據(jù)庫引擎的首先。

使用場景:

容量的數(shù)據(jù)集時趨向于選擇Innodb。因為它支持事務(wù)處理和故障的恢復(fù)。Innodb可以利用數(shù)據(jù)日志來進行數(shù)據(jù)的恢復(fù)。主鍵

的查詢在Innodb也是比較快的。

大批量的插入語句時(這里是INSERT語句)在MyIASM引擎中執(zhí)行的比較的快,但是UPDATE語句在Innodb下執(zhí)行的會比較

的快,尤其是在并發(fā)量大的時候。

兩種引擎所使用的索引的數(shù)據(jù)結(jié)構(gòu)是什么?

答案:都是B+樹!

MyIASM引擎,B+樹的數(shù)據(jù)結(jié)構(gòu)中存儲的內(nèi)容實際上是實際數(shù)據(jù)的地址值。也就是說它的索引和實際數(shù)據(jù)是分開的,只不過使用索引指向了實際數(shù)據(jù)。這種索引的模式被稱為非聚集索引。

Innodb引擎的索引的數(shù)據(jù)結(jié)構(gòu)也是B+樹,只不過數(shù)據(jù)結(jié)構(gòu)中存儲的都是實際的數(shù)據(jù),這種索引有被稱為聚集索引。

使用事務(wù)

因為Mysql默認是使用MyIASM 引擎,所以如果想支持事務(wù)必須切換到 Innodb引擎。

windows下找到Mysql.ini

image.png

按照注釋操作后重啟MySQL

設(shè)置提交模式

set autocommit =0; //關(guān)閉自動提交(設(shè)置這個)
set autocommit =1; //開啟自動提交

創(chuàng)建表語句
CREATE TABLE runoob_transaction_test( id int(5)) engine=innodb;

填充數(shù)據(jù)

以自己的表舉例


image.png

模擬開工資的時候斷電了(q是老板,a是員工)

輸入語句

開始事務(wù): start transaction;

執(zhí)行兩條更新操作

1.扣住老板1000元
update p1 set balance = balance -1000 where firstname='q';

2.員工增加1000元
update p1 set balance = balance + 1000 where firstname='a';

然后我們查一下結(jié)果

image.png

可以看到 表中數(shù)據(jù)已經(jīng)發(fā)生變化

接下來模擬斷電;

輸入命令 quit;


image.png

重新連接數(shù)據(jù)庫
再次查詢下表

image.png

數(shù)據(jù)又變回去了

設(shè)置取消自動提交后
需要commit之后才能保存最終結(jié)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容