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

MySQL基礎入門教程之事務

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

引言

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

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

這一組操作就必須在一個事務的范圍內,要么都成功,要么都失敗。

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

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

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

注意: 默認MySQL的事務是自動提交的,也就是說,當執(zhí)行完一條DML語句時,MySQL會立即隱式的提交事務

1、事務操作

數據庫腳本: 

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 未控制事務

1、測試正常情況

-- 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 = '李四';

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

2、 測試異常情況

-- 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 = '李四'

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

1.2 控制事務一

1、查看/設置事務提交方式

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

2、 提交事務

COMMIT;

3、回滾事務

ROLLBACK;

注意:

上述的這種方式,我們是修改了事務的自動提交行為, 把默認的自動提交修改為了手動提交, 此時我們執(zhí)行的DML語句都不會提交, 需要手動的執(zhí)行commit進行提交。

1.3 控制事務二

1、開啟事務

START TRANSACTION 或 BEGIN ;

2、提交事務

COMMIT;

3、回滾事務

ROLLBACK;

轉賬案例:

-- 開啟事務 
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í)行完畢, 則提交事務 
commit; 
-- 如果執(zhí)行過程中報錯, 則回滾事務 
-- rollback;

2、事務的四大特性

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

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

  • 隔離性(Isolation):數據庫系統提供的隔離機制,保證事務在不受外部并發(fā)操作影響的獨立環(huán)境下運行。

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

上述就是事務的四大特性,簡稱ACID。

3、并發(fā)事務問題

1、贓讀:一個事務讀到另外一個事務還沒有提交的數據。

2、不可重復讀:一個事務先后讀取同一條記錄,但兩次讀取的數據不同,稱之為不可重復讀。

3、幻讀:一個事務按照條件查詢數據時,沒有對應的數據行,但是在插入數據時,又發(fā)現這行數據已經存在,好像出現了 "幻影“。

4、事務隔離級別

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

1、查看事務隔離級別

SELECT @@TRANSACTION_ISOLATION; 1

2、設置事務隔離級別

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

注意:事務隔離級別越高,數據越安全,但是性能越低

總結

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

相關文章

  • MySql索引使用策略分析

    MySql索引使用策略分析

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

    通過mysqladmin遠程管理mysql的方法

    在一些特殊場景下,想要遠程重啟mysql,以便讓某些修改能及時的生效,但是mysql并沒有提供遠程重啟的功能,唯一能做的就是遠程關閉mysql服務
    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查詢數據庫連接狀態(tài)以及連接信息詳解

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

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

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

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

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

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

    mysql如何將表結構導出到excel

    這篇文章主要介紹了mysql如何將表結構導出到excel,幫助大家更好的理解和使用MySQL數據庫,感興趣的朋友可以了解下
    2020-09-09
  • MySQL命令行導出導入數據庫實例詳解

    MySQL命令行導出導入數據庫實例詳解

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

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

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

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

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

最新評論