欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

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

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

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

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

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

注意: 默認(rèn)MySQL的事務(wù)是自動(dòng)提交的,也就是說,當(dāng)執(zhí)行完一條DML語句時(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語句(出錯(cuò)了.... 這句話不符合SQL語法,執(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語句都不會(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í)行過程中報(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ù)問題

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

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

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

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

為了解決并發(fā)事務(wù)所引發(fā)的問題,在數(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索引使用策略分析

    MySql索引使用策略分析

    這篇文章主要介紹了MySql索引使用策略分析,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-11-11
  • 通過mysqladmin遠(yuǎn)程管理mysql的方法

    通過mysqladmin遠(yuǎn)程管理mysql的方法

    在一些特殊場(chǎng)景下,想要遠(yuǎn)程重啟mysql,以便讓某些修改能及時(shí)的生效,但是mysql并沒有提供遠(yuǎn)程重啟的功能,唯一能做的就是遠(yuǎn)程關(guān)閉mysql服務(wù)
    2013-03-03
  • 阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程

    阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程

    這篇文章主要介紹了阿里云 Centos7.3安裝mysql5.7.18 rpm安裝教程,需要的朋友可以參考下
    2017-06-06
  • Mysql查詢數(shù)據(jù)庫(kù)連接狀態(tài)以及連接信息詳解

    Mysql查詢數(shù)據(jù)庫(kù)連接狀態(tài)以及連接信息詳解

    這篇文章主要給大家介紹了關(guān)于Mysql查詢數(shù)據(jù)庫(kù)連接狀態(tài)以及連接信息的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 詳解GaussDB for MySQL性能優(yōu)化

    詳解GaussDB for MySQL性能優(yōu)化

    GaussDB(for MySQL)數(shù)據(jù)庫(kù)在寫入性能上,在業(yè)界同類產(chǎn)品中是最好的,這主要得益于GaussDB(for MySQL)在MySQL內(nèi)核方面的諸多優(yōu)化。其中有一項(xiàng)從“送快遞”得來靈感的優(yōu)化——事務(wù)異步提交,值得我們分析。
    2021-05-05
  • MySQL數(shù)據(jù)類型之淺談字符串(string)

    MySQL數(shù)據(jù)類型之淺談字符串(string)

    這篇文章主要介紹了MySQL數(shù)據(jù)類型之字符串(string)的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • mysql如何將表結(jié)構(gòu)導(dǎo)出到excel

    mysql如何將表結(jié)構(gòu)導(dǎo)出到excel

    這篇文章主要介紹了mysql如何將表結(jié)構(gòu)導(dǎo)出到excel,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-09-09
  • MySQL命令行導(dǎo)出導(dǎo)入數(shù)據(jù)庫(kù)實(shí)例詳解

    MySQL命令行導(dǎo)出導(dǎo)入數(shù)據(jù)庫(kù)實(shí)例詳解

    這篇文章主要介紹了MySQL命令行導(dǎo)出導(dǎo)入數(shù)據(jù)庫(kù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • MySQL計(jì)算連續(xù)3天登陸的用戶

    MySQL計(jì)算連續(xù)3天登陸的用戶

    本文主要介紹了MySQL計(jì)算連續(xù)3天登陸的用戶,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 解決mysql 組合AND和OR帶來的問題

    解決mysql 組合AND和OR帶來的問題

    這篇文章主要介紹了解決mysql 組合AND和OR帶來的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評(píng)論