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

MySQL數據庫之事務簡析

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

事務簡介

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

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

操作實例

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

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

之后插入數據:

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

 回憶上面的轉賬操作,先查詢張三的余額

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

之后將張三的錢轉給李四,注意這是兩個操作

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

執(zhí)行完上述語句后發(fā)現,沒有問題,李四的錢自然變成3000,張三為1000。那么,我們如果輸入了一個錯誤語句,但上面兩條轉錢的操作正確,我們知道程序會報錯。但是,我們希望錢并沒有被轉走,而是終止這件事務,但MySQL或依然執(zhí)行正確的語句,錢依然會被轉走。

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

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

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

這時我們需要加上語句:commit。我們發(fā)現這樣還是不能保證出錯時數據不變啊,這時我還需要另一個利器:

事務回滾roolback。執(zhí)行roolback語句程序就會只報錯而不提交,保證了數據安全。

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

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

start transaction;/begin;

之后,如果錯誤的語句報錯正確的語句也不會提交到數據庫修改數據。

事務的四大特性

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

并發(fā)事務問題

事務隔離級別 

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

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

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

查詢事務隔離級別:

SELECT @@TRANSACTION_ISOLATION;

設置事務隔離級別:

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

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

相關文章

  • mysql在update,非主鍵索引更新引起死鎖問題

    mysql在update,非主鍵索引更新引起死鎖問題

    這篇文章主要介紹了mysql在update,非主鍵索引更新引起死鎖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • dmysql自己封裝的mysql庫

    dmysql自己封裝的mysql庫

    dmysql自己封裝的mysql庫...
    2007-07-07
  • 解決mysql的賦權操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION問題

    解決mysql的賦權操作之GRANT ALL PRIVILEGES ON *.*

    這篇文章主要介紹了解決mysql的賦權操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION問題,本文給大家分享兩種情況分析分享解決方案,感興趣的朋友一起看看吧
    2022-11-11
  • Mysql LONGBLOB 類型存儲二進制數據 (修改+調試+整理)

    Mysql LONGBLOB 類型存儲二進制數據 (修改+調試+整理)

    代碼來自網絡,我學習整理了一下,測試通過,下面的參數需要設置為你自己的
    2009-07-07
  • MySQL在Windows上安裝的詳細流程

    MySQL在Windows上安裝的詳細流程

    MySQL 是最流行的數據庫管理系統(tǒng) (DBMS) 之一,它輕量、開源且易于安裝和使用,因此對于那些剛開始學習和使用關系數據庫的人來說是一個不錯的選擇, 本文主要系統(tǒng)介紹Windows的環(huán)境下MySQL的安裝過程和驗證過程,需要的朋友可以參考下
    2024-12-12
  • SQL實現LeetCode(180.連續(xù)的數字)

    SQL實現LeetCode(180.連續(xù)的數字)

    這篇文章主要介紹了SQL實現LeetCode(180.連續(xù)的數字),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • MySQL?從0到1打開數據庫管理操作方法

    MySQL?從0到1打開數據庫管理操作方法

    數據庫管理系統(tǒng)(DataBase?Management?System)是用來創(chuàng)建數據庫和管理數據庫數據的一個管理軟件,我們口頭說的MySQL數據庫就是這個管理系統(tǒng),這篇文章主要介紹了MySQL從0到1打開數據庫管理,需要的朋友可以參考下
    2023-06-06
  • MySQL數據庫統(tǒng)計函數COUNT的使用及說明

    MySQL數據庫統(tǒng)計函數COUNT的使用及說明

    這篇文章主要介紹了MySQL數據庫統(tǒng)計函數COUNT的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Windows下mysql 8.0.12 安裝詳細教程

    Windows下mysql 8.0.12 安裝詳細教程

    這篇文章主要為大家詳細介紹了Windows下mysql 8.0.12 安裝詳細教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 設置MySQL中的數據類型來優(yōu)化運行速度的實例

    設置MySQL中的數據類型來優(yōu)化運行速度的實例

    這篇文章主要介紹了設置MySQL中索引的數據類型來優(yōu)化運行速度的實例,主要是適當使用短字節(jié)的數據類型來處理短索引,需要的朋友可以參考下
    2015-05-05

最新評論