最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL基礎(chǔ)入門教程之事務(wù)

 更新時(shí)間:2022年04月11日 15:16:37   作者:一切總會(huì)歸于平淡  
事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL基礎(chǔ)入門教程之事務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

引言

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

就比如: 張三給李四轉(zhuǎn)賬1000塊錢,張三銀行賬戶的錢減少1000,而李四銀行賬戶的錢要增加1000。

這一組操作就必須在一個(gè)事務(wù)的范圍內(nèi),要么都成功,要么都失敗。

正常情況: 轉(zhuǎn)賬這個(gè)操作, 需要分為以下這么三步來(lái)完成 , 三步完成之后, 張三減少1000, 而李四 增加1000, 轉(zhuǎn)賬成功 :

異常情況: 轉(zhuǎn)賬這個(gè)操作, 也是分為以下這么三步來(lái)完成 , 在執(zhí)行第三步是報(bào)錯(cuò)了, 這樣就導(dǎo)致張三減少1000塊錢, 而李四的金額沒(méi)變, 這樣就造成了數(shù)據(jù)的不一致, 就出現(xiàn)問(wèn)題了。 

為了解決上述的問(wèn)題,就需要通過(guò)數(shù)據(jù)的事務(wù)來(lái)完成,我們只需要在業(yè)務(wù)邏輯執(zhí)行之前開啟事務(wù),執(zhí)行完畢后提交事務(wù)。如果執(zhí)行過(guò)程中報(bào)錯(cuò),則回滾事務(wù),把數(shù)據(jù)恢復(fù)到事務(wù)開始之前的狀態(tài)。

注意: 默認(rèn)MySQL的事務(wù)是自動(dòng)提交的,也就是說(shuō),當(dāng)執(zhí)行完一條DML語(yǔ)句時(shí),MySQL會(huì)立即隱式的提交事務(wù)

1、事務(wù)操作

數(shù)據(jù)庫(kù)腳本: 

drop table if exists account;
create table account
(
    id    int primary key AUTO_INCREMENT comment 'ID',
    name  varchar(10) comment '姓名',
    money double(10, 2) comment '余額'
) comment '賬戶表';
insert into account(name, money)
VALUES ('張三', 2000),
       ('李四', 2000);

1.1 未控制事務(wù)

1、測(cè)試正常情況

-- 1. 查詢張三余額
select * from account where name = '張三';
-- 2. 張三的余額減少1000
update account set money = money - 1000 where name = '張三';
-- 3. 李四的余額增加1000
update account set money = money + 1000 where name = '李四';

測(cè)試完畢之后檢查數(shù)據(jù)的狀態(tài), 可以看到數(shù)據(jù)操作前后是一致的

2、 測(cè)試異常情況

-- 1. 查詢張三余額
select * from account where name = '張三';
-- 2. 張三的余額減少1000
update account set money = money - 1000 where name = '張三'; 出錯(cuò)了....
-- 3. 李四的余額增加1000
update account set money = money + 1000 where name = '李四'

我們把數(shù)據(jù)都恢復(fù)到2000, 然后再次一次性執(zhí)行上述的SQL語(yǔ)句(出錯(cuò)了.... 這句話不符合SQL語(yǔ)法,執(zhí)行就會(huì)報(bào)錯(cuò)),檢查最終的數(shù)據(jù)情況, 發(fā)現(xiàn)數(shù)據(jù)在操作前后不一致了

1.2 控制事務(wù)一

1、查看/設(shè)置事務(wù)提交方式

SELECT @@autocommit ; 
SET @@autocommit = 0 ;

2、 提交事務(wù)

COMMIT;

3、回滾事務(wù)

ROLLBACK;

注意:

上述的這種方式,我們是修改了事務(wù)的自動(dòng)提交行為, 把默認(rèn)的自動(dòng)提交修改為了手動(dòng)提交, 此時(shí)我們執(zhí)行的DML語(yǔ)句都不會(huì)提交, 需要手動(dòng)的執(zhí)行commit進(jìn)行提交。

1.3 控制事務(wù)二

1、開啟事務(wù)

START TRANSACTION 或 BEGIN ;

2、提交事務(wù)

COMMIT;

3、回滾事務(wù)

ROLLBACK;

轉(zhuǎn)賬案例:

-- 開啟事務(wù) 
start transaction 
-- 1. 查詢張三余額 
select * from account where name = '張三'; 
-- 2. 張三的余額減少1000 
update account set money = money - 1000 where name = '張三'; 
-- 3. 李四的余額增加1000 
update account set money = money + 1000 where name = '李四'; 
-- 如果正常執(zhí)行完畢, 則提交事務(wù) 
commit; 
-- 如果執(zhí)行過(guò)程中報(bào)錯(cuò), 則回滾事務(wù) 
-- rollback;

2、事務(wù)的四大特性

  • 原子性(Atomicity):事務(wù)是不可分割的最小操作單元,要么全部成功,要么全部失敗。

  • 一致性(Consistency):事務(wù)完成時(shí),必須使所有的數(shù)據(jù)都保持一致狀態(tài)。

  • 隔離性(Isolation):數(shù)據(jù)庫(kù)系統(tǒng)提供的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的獨(dú)立環(huán)境下運(yùn)行。

  • 持久性(Durability):事務(wù)一旦提交或回滾,它對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久的。

上述就是事務(wù)的四大特性,簡(jiǎn)稱ACID。

3、并發(fā)事務(wù)問(wèn)題

1、贓讀:一個(gè)事務(wù)讀到另外一個(gè)事務(wù)還沒(méi)有提交的數(shù)據(jù)。

2、不可重復(fù)讀:一個(gè)事務(wù)先后讀取同一條記錄,但兩次讀取的數(shù)據(jù)不同,稱之為不可重復(fù)讀。

3、幻讀:一個(gè)事務(wù)按照條件查詢數(shù)據(jù)時(shí),沒(méi)有對(duì)應(yīng)的數(shù)據(jù)行,但是在插入數(shù)據(jù)時(shí),又發(fā)現(xiàn)這行數(shù)據(jù)已經(jīng)存在,好像出現(xiàn)了 "幻影“。

4、事務(wù)隔離級(jí)別

為了解決并發(fā)事務(wù)所引發(fā)的問(wèn)題,在數(shù)據(jù)庫(kù)中引入了事務(wù)隔離級(jí)別。主要有以下幾種:

1、查看事務(wù)隔離級(jí)別

SELECT @@TRANSACTION_ISOLATION; 1

2、設(shè)置事務(wù)隔離級(jí)別

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL 
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

注意:事務(wù)隔離級(jí)別越高,數(shù)據(jù)越安全,但是性能越低

總結(jié)

到此這篇關(guān)于MySQL基礎(chǔ)入門教程之事務(wù)的文章就介紹到這了,更多相關(guān)MySQL基礎(chǔ)事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Mysql Join語(yǔ)法以及性能優(yōu)化

    淺析Mysql Join語(yǔ)法以及性能優(yōu)化

    在講MySQL的Join語(yǔ)法前還是先回顧一下聯(lián)結(jié)的語(yǔ)法,呵呵,其實(shí)連我自己都忘得差不多了,那就大家一起溫習(xí)吧,這里我有個(gè)比較簡(jiǎn)便的記憶方法,內(nèi)外聯(lián)結(jié)的區(qū)別是內(nèi)聯(lián)結(jié)將去除所有不符合條件的記錄,而外聯(lián)結(jié)則保留其中部分。外左聯(lián)結(jié)與外右聯(lián)結(jié)的區(qū)別在于如果用A左聯(lián)結(jié)B則A中所有記錄都會(huì)保留在結(jié)果中,此時(shí)B中只有符合聯(lián)結(jié)條件的記錄,而右聯(lián)結(jié)相反,這樣也就不會(huì)混淆了。
    2014-05-05
  • 在同一臺(tái)機(jī)器上運(yùn)行多個(gè) MySQL 服務(wù)

    在同一臺(tái)機(jī)器上運(yùn)行多個(gè) MySQL 服務(wù)

    在同一臺(tái)機(jī)器上運(yùn)行多個(gè) MySQL 服務(wù)...
    2006-11-11
  • 如何開啟mysql中的嚴(yán)格模式

    如何開啟mysql中的嚴(yán)格模式

    這篇文章介紹了如何開啟mysql中的嚴(yán)格模式,有需要的朋友可以參考一下
    2013-09-09
  • MYSQL中有關(guān)SUM字段按條件統(tǒng)計(jì)使用IF函數(shù)(case)問(wèn)題

    MYSQL中有關(guān)SUM字段按條件統(tǒng)計(jì)使用IF函數(shù)(case)問(wèn)題

    MYSQL中SUM字段按條件統(tǒng)計(jì)使用IF函數(shù),具體實(shí)現(xiàn)代碼如下,感興趣的朋友不要錯(cuò)過(guò)
    2014-01-01
  • Mysql實(shí)現(xiàn)模糊查詢的兩種方式(like子句?、正則表達(dá)式)

    Mysql實(shí)現(xiàn)模糊查詢的兩種方式(like子句?、正則表達(dá)式)

    通配符是一種特殊語(yǔ)句,主要用來(lái)模糊查詢,下面這篇文章主要給大家介紹了關(guān)于給Mysql實(shí)現(xiàn)模糊查詢的兩種方式,分別是like子句?、正則表達(dá)式,需要的朋友可以參考下
    2022-09-09
  • Mysql中的嵌套子查詢問(wèn)題

    Mysql中的嵌套子查詢問(wèn)題

    這篇文章主要介紹了Mysql嵌套子查詢,子查詢就是指的在一個(gè)完整的查詢語(yǔ)句之中,嵌套若干個(gè)不同功能的小查詢,從而一起完成復(fù)雜查詢的一種編寫形式,為了讓讀者更加清楚子查詢的概念,感興趣的朋友跟隨小編一起看看吧
    2022-01-01
  • Mysql中幾種插入效率的實(shí)例對(duì)比

    Mysql中幾種插入效率的實(shí)例對(duì)比

    這篇文章通過(guò)實(shí)例跟大家介紹了Mysql中幾種插入方法的效率對(duì)比,這其中包括逐條插入、基于事務(wù)的批量插入、單條語(yǔ)句一次插入多組數(shù)據(jù)以及導(dǎo)入數(shù)據(jù)文件等四種方法的對(duì)比,文中通過(guò)實(shí)例代碼介紹很詳細(xì),需要的朋友們下來(lái)來(lái)一起看看吧。
    2017-04-04
  • MYSQL必知必會(huì)讀書筆記第二章之版本更改

    MYSQL必知必會(huì)讀書筆記第二章之版本更改

    本文是小編日常收集整理些有關(guān)mysql必知必會(huì)筆記整理第二章,小編感覺(jué)非常實(shí)用,特此分享到腳本之家平臺(tái),供大家參考
    2016-05-05
  • MySQL中的集合運(yùn)算符詳解

    MySQL中的集合運(yùn)算符詳解

    本文主要介紹了MySQL中的集合運(yùn)算符,包括UNION、INTERSECT、EXCEPT等,這些運(yùn)算符用于結(jié)合兩個(gè)或多個(gè)SELECT語(yǔ)句的結(jié)果集,并進(jìn)行去重、合并或差集操作
    2025-02-02
  • Java連接Mysql 8.0.18版本的方法詳解

    Java連接Mysql 8.0.18版本的方法詳解

    這篇文章主要介紹了Java和Mysql 8.0.18版本的連接方式,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評(píng)論

勃利县| 凤城市| 大荔县| 西乡县| 无棣县| 那曲县| 光山县| 雷波县| 临湘市| 赣榆县| 淳化县| 香河县| 阿鲁科尔沁旗| 阳信县| 南投县| 柘荣县| 海晏县| 曲沃县| 临洮县| 永吉县| 浏阳市| 轮台县| 冷水江市| 集贤县| 昌都县| 扶余县| 潼南县| 曲松县| 渭南市| 闵行区| 三穗县| 伊宁市| 新和县| 德清县| 郸城县| 乌审旗| 馆陶县| 宁化县| 滕州市| 登封市| 潜江市|