日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL—事务及其特征

發布時間:2025/3/21 数据库 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL—事务及其特征 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

例子1:
舉一個例子來進行說明,例如轉賬操作:A賬戶要轉賬給B賬戶,那么A賬戶上減少的錢數和B賬戶上增加的錢數必須一致,也就是說A賬戶的轉出操作和B賬戶的轉入操作要么全部執行,要么全不執行;如果其中一個操作出現異常而沒有執行的話,就會導致賬戶A和賬戶B的轉入轉出金額不一致的情況,事實上這種情況是不允許發生的,所以為了防止這種情況的發生,需要使用事務處理。
例子2:
在淘寶購物下訂單的時候,商家庫存要減少,訂單增加記錄,付款我的賬號少100元…操作要么全部執行,要么全不執行

一、事務的概念:

事務(Transaction)指的是一個操作序列,該操作序列中的多個操作要么都做,要么都不做,是一個不可分割的工作單位,是數據庫環境中的邏輯工作單位

二、事務的特性

事務處理可以確保除非事務性序列內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要么全部成功要么全部失敗的序列,可以簡化錯誤恢復并使應用程序更加可靠。
但并不是所有的操作序列都可以稱為事務,這是因為一個操作序列要成為事務,必須滿足事務的原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。這四個特性簡稱為ACID特性。

1)原子性
原子是自然界最小的顆粒,具有不可再分的特性。事務中的所有操作可以看做一個原子,事務是應用中不可再分的最小的邏輯執行體。使用事務對數據進行修改的操作序列,要么全部執行,要么全不執行。通常,某個事務中的操作都具有共同的目標,并且是相互依賴的。如果數據庫系統只執行這些操作中的一部分,則可能會破壞事務的總體目標,而原子性消除了系統只處理部分操作的可能性。

2) 一致性
一致性是指事務執行的結果必須使數據庫從一個一致性狀態,變到另一個一致性狀態。當數據庫中只包含事務成功提交的結果時,數據庫處于一致性狀態。一致性是通過原子性來保證的。例如:在轉賬時,只有保證轉出和轉入的金額一致才能構成事務。也就是說事務發生前和發生后,數據的總額依然匹配。

3) 隔離性
隔離性是指各個事務的執行互不干擾,任意一個事務的內部操作對其他并發的事務,都是隔離的。也就是說:并發執行的事務之間既不能看到對方的中間狀態,也不能相互影響。
例如:在轉賬時,只有當A賬戶中的轉出和B賬戶中轉入操作都執行成功后才能看到A賬戶中的金額減少以及B賬戶中的金額增多。并且其他的事務對于轉賬操作的事務是不能產生任何影響的。

4)持久性
持久性指事務一旦提交,對數據所做的任何改變,都要記錄到永久存儲器中,通常是保存進物理數據庫,即使數據庫出現故障,提交的數據也應該能夠恢復。但如果是由于外部原因導致的數據庫故障,如硬盤被損壞,那么之前提交的數據則有可能會丟失。

三、sql展示:使用事務保證轉賬安全

創建賬戶表:

create table account(id int primary key auto_increment,uname varchar(10) not null,balance double );

查看賬戶表

select * from account

插入數據

insert into account values(null,'kb',2000),(null,'kd',2000)

kb給kd轉賬200元

update account set balance=balance-200 where id=1; update account set balance=balance+200 where id=2;

同時執行上面2條sql語句,運行結果:符合邏輯

默認一個DML語句是一個事務,所以上面的操作執行了2個事務
怎么判斷是不是一個事務呢?第二條sql語句錯誤

update account set balance=balance-200 where id=1; update account set balance=balance2+200 where id=2;

運行結果:id=1的賬戶錢憑空消失了

必須讓上面的2個操作控制在一個事務中

開啟事務

start transaction update account set balance=balance-200 where id=1; update account set balance=balance+200 where id=2;

手動回滾:剛才操作全部取消

ROLLBACK;

手動提交

commit

在回滾和提交之前,數據庫中的數據都是操作的緩沖中的數據,而不是數據庫真實的數據

總結

以上是生活随笔為你收集整理的MySQL—事务及其特征的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。