mysql事務(wù)管理操作詳解
本文實(shí)例講述了mysql事務(wù)管理操作。分享給大家供大家參考,具體如下:
本文內(nèi)容:
- 什么是事務(wù)管理
- 事務(wù)管理操作
- 回滾點(diǎn)
- 默認(rèn)的事務(wù)管理
首發(fā)日期:2018-04-18
什么是事務(wù)管理:
- 可以把一系列要執(zhí)行的操作稱為事務(wù),而事務(wù)管理就是管理這些操作要么完全執(zhí)行,要么完全不執(zhí)行(很經(jīng)典的一個(gè)例子是:A要給B轉(zhuǎn)錢(qián),首先A的錢(qián)減少了,但是突然的數(shù)據(jù)庫(kù)斷電了,導(dǎo)致無(wú)法給B加錢(qián),然后由于丟失數(shù)據(jù),B不承認(rèn)收到A的錢(qián);在這里事務(wù)就是確保加錢(qián)和減錢(qián)兩個(gè)都完全執(zhí)行或完全不執(zhí)行,如果加錢(qián)失敗,那么不會(huì)發(fā)生減錢(qián))。
- 事務(wù)管理的意義:保證數(shù)據(jù)操作的完整性。
- mysql中并不是所有的數(shù)據(jù)引擎都支持事務(wù)管理的,只有innodb支持事務(wù)管理。
事務(wù)管理的特性:
- 原子性:事務(wù)的整個(gè)操作是一個(gè)整體,不可以分割,要么全部成功,要么全部失敗。
- 一致性:事務(wù)操作的前后,數(shù)據(jù)表中的數(shù)據(jù)沒(méi)有變化。
- 隔離性:事務(wù)操作是相互隔離不受影響的。
- 持久性:數(shù)據(jù)一旦提交,不可改變,永久的改變數(shù)據(jù)表數(shù)據(jù)。
事務(wù)管理操作:
- 開(kāi)啟事務(wù)管理:開(kāi)啟之后,下面的sql語(yǔ)句并不會(huì)馬上執(zhí)行并把結(jié)果寫(xiě)到表中,而是會(huì)寫(xiě)到事務(wù)日志中。
- start transaction;
- 回退操作:回退會(huì)清掉開(kāi)始事務(wù)管理之后寫(xiě)到事務(wù)日志中的內(nèi)容,即恢復(fù)到開(kāi)啟事務(wù)管理之前。
- 語(yǔ)法:rollback;
- 注意:回退操作只是回退"寫(xiě)"的內(nèi)容,對(duì)于普通的讀表select語(yǔ)句不能回退。
- 事務(wù)提交:將sql語(yǔ)句的結(jié)果寫(xiě)到數(shù)據(jù)表中。
- 語(yǔ)法:commit:
實(shí)驗(yàn)表:
create table bankaccount(id int primary key auto_increment,name varchar(15),money int); insert into bankaccount(name,money) values("Jobs",2000); insert into bankaccount(name,money) values("Bill",3000);
補(bǔ)充:
- 當(dāng) commit 或 rollback 語(yǔ)句執(zhí)行后,事務(wù)會(huì)自動(dòng)關(guān)閉(將來(lái)的更改會(huì)隱含提交)。
- 鎖機(jī)制:在事務(wù)操作一個(gè)表時(shí),如果使用索引來(lái)取值,那么會(huì)鎖定到對(duì)應(yīng)行;如果沒(méi)有使用索引來(lái)取值,那么會(huì)鎖定整個(gè)表。鎖定之后其他連接無(wú)法操作指定行或表。
回滾點(diǎn):
- 回滾點(diǎn)可以指定rollback回退的位置【比如現(xiàn)在打了100條命令,發(fā)現(xiàn)第81打錯(cuò)了,如果回滾到打了81命令之前一點(diǎn)而不是回滾到開(kāi)啟事務(wù)之前就可以節(jié)省下很多時(shí)間。】
- 語(yǔ)法:
- 創(chuàng)建回滾點(diǎn):savepoint 回滾點(diǎn)名;
- 回滾到回滾點(diǎn):rollback to 回滾點(diǎn)名;
補(bǔ)充:
- 回滾點(diǎn)在事務(wù)管理關(guān)閉(rollback或commit之后)之后失效,不要在事務(wù)之外使用回滾點(diǎn)。
默認(rèn)的事務(wù)管理:
- 默認(rèn)情況下,mysql的事務(wù)管理是關(guān)閉(自動(dòng)事務(wù))的,語(yǔ)句的結(jié)果會(huì)馬上寫(xiě)到數(shù)據(jù)表中。
- 可以通過(guò)show variable like 'autocommit';來(lái)查看是否開(kāi)啟自動(dòng)事務(wù),值為1為自動(dòng)事務(wù)已開(kāi)啟,為0則為關(guān)閉。
- 關(guān)閉自動(dòng)事務(wù):set autocommit =0;【關(guān)閉后需要commit來(lái)執(zhí)行每一條語(yǔ)句,相當(dāng)于開(kāi)始了事務(wù)管理】
- 不過(guò)注意的是set autocommit針對(duì)的是會(huì)話變量,所以這個(gè)設(shè)置只在此次會(huì)話連接中生效。
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL事務(wù)操作技巧匯總》、《MySQL索引操作技巧匯總》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL存儲(chǔ)過(guò)程技巧大全》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
相關(guān)文章
mysql一對(duì)多關(guān)聯(lián)查詢分頁(yè)錯(cuò)誤問(wèn)題的解決方法
這篇文章主要介紹了mysql一對(duì)多關(guān)聯(lián)查詢分頁(yè)錯(cuò)誤問(wèn)題的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09MySQL 序列 AUTO_INCREMENT詳解及實(shí)例代碼
這篇文章主要介紹了MySQL 序列 AUTO_INCREMENT詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02mysql 批處理文件出錯(cuò)后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇mysql 批處理文件出錯(cuò)后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10MySQL安裝后默認(rèn)自帶數(shù)據(jù)庫(kù)的作用詳解
這篇文章主要介紹了MySQL安裝后默認(rèn)自帶數(shù)據(jù)庫(kù)的作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04MySQL聯(lián)合查詢實(shí)現(xiàn)方法詳解
聯(lián)合查詢union將多次查詢(多條select語(yǔ)句)的結(jié)果,在字段數(shù)相同的情況下,在記錄的層次上進(jìn)行拼接,這篇文章主要給大家介紹了關(guān)于Mysql聯(lián)合查詢的那些事兒,需要的朋友可以參考下2022-11-11mysql中的utf8與utf8mb4存儲(chǔ)及區(qū)別
本文主要介紹了mysql中的utf8與utf8mb4存儲(chǔ)及區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02