亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL數(shù)據(jù)庫之事務(wù)簡析

 更新時(shí)間:2023年09月06日 08:32:07   作者:CodeRanger  
這篇文章主要介紹了MySQL數(shù)據(jù)庫之事務(wù)簡析,MySQL數(shù)據(jù)庫中的事務(wù)是一組數(shù)據(jù)庫操作,它們被視為一個(gè)整體,要么全部執(zhí)行成功,要么全部失敗回滾,MySQL支持四種事務(wù)隔離級別,其中默認(rèn)的事務(wù)隔離級別是REPEATABLE?READ,需要的朋友可以參考下

事務(wù)簡介

事務(wù)是一組操作的集合,它是一個(gè)不可分割的工作單位,事務(wù)會把所有的操作作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作請求,即這些操作要么同時(shí)成功,要么同時(shí)失敗。

例如一個(gè)銀行轉(zhuǎn)賬操作,張三向李四轉(zhuǎn)1000塊錢,那么第一步要判斷張三是否有1000塊,如果沒有,那么事務(wù)就會拋出異常,直接結(jié)束,后面的收款等一系列操作也宣告失敗。

操作實(shí)例

我們先創(chuàng)建一個(gè)表格,里面有人物和金額:

create table account(
    -> id int auto_increment primary key comment '主鍵ID',
    -> name varchar(10) comment '姓名',
    -> money int comment '余額'
    -> ) comment '賬戶表';

之后插入數(shù)據(jù):

insert into account(id, name, money) VALUES (null, '張三', 2000),(null, '李四', 2000);

 回憶上面的轉(zhuǎn)賬操作,先查詢張三的余額

select * from account where name ='張三';

之后將張三的錢轉(zhuǎn)給李四,注意這是兩個(gè)操作

update account set money = money - 1000 where name = '張三';
update account set money = money + 1000 where name = '李四';

執(zhí)行完上述語句后發(fā)現(xiàn),沒有問題,李四的錢自然變成3000,張三為1000。那么,我們?nèi)绻斎肓艘粋€(gè)錯(cuò)誤語句,但上面兩條轉(zhuǎn)錢的操作正確,我們知道程序會報(bào)錯(cuò)。但是,我們希望錢并沒有被轉(zhuǎn)走,而是終止這件事務(wù),但MySQL或依然執(zhí)行正確的語句,錢依然會被轉(zhuǎn)走。

解決方法一、修改提交方式

MySQL自定義的提交方式就是自動(dòng)提交(autocommit),我們只需要把自動(dòng)提交修改為手動(dòng)提交,即語法:set @@autocommit = 0;

同理,由于我們的提交方式改為手動(dòng)提交,輸入正確的語句會被執(zhí)行,但不會提交到數(shù)據(jù)庫

這時(shí)我們需要加上語句:commit。我們發(fā)現(xiàn)這樣還是不能保證出錯(cuò)時(shí)數(shù)據(jù)不變啊,這時(shí)我還需要另一個(gè)利器:

事務(wù)回滾roolback。執(zhí)行roolback語句程序就會只報(bào)錯(cuò)而不提交,保證了數(shù)據(jù)安全。

解決方法二、不改變提交方式,利用事務(wù)指令

記得將提交方式改為自動(dòng)提交。首先,執(zhí)行一個(gè)事務(wù)首先要開啟,事務(wù)的開啟指令為:           

start transaction;/begin;

之后,如果錯(cuò)誤的語句報(bào)錯(cuò)正確的語句也不會提交到數(shù)據(jù)庫修改數(shù)據(jù)。

事務(wù)的四大特性

  • 原子性((Atomicity):事務(wù)是不可分割的最小操作單元,要么全部成功,要么全部失敗。這是不是和上面的例子相同呢?
  • 一致性(Consistency)︰事務(wù)完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)。
  • 隔離性(Isolation)∶數(shù)據(jù)庫系統(tǒng)提供的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的獨(dú)立環(huán)境下運(yùn)行。
  • 持久性(Durability)∶事務(wù)一旦提交或回滾,它對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久的  

并發(fā)事務(wù)問題

事務(wù)隔離級別 

事務(wù)的隔離級別就是解決上面的事務(wù)并發(fā)問題的。

 從上到下,隔離級別是越來越高的,但是數(shù)據(jù)庫的性能是越來越低的。

下面給出級別查詢的語句:

查詢事務(wù)隔離級別:

SELECT @@TRANSACTION_ISOLATION;

設(shè)置事務(wù)隔離級別:

SET[SESSION|/GLOBAL]TRANSACTION I5SOLATION LEVEL{READUNCOMMITED |READCOMMITED|REPEATABLEREAD |SERALZABLE}

到此這篇關(guān)于MySQL數(shù)據(jù)庫之事務(wù)簡析的文章就介紹到這了,更多相關(guān)MySQL事務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論