mysql-mysql13mysql事務

一丶什麼是事務

​ 開啓一個事務能夠包含一些sql語句,這些sql語句要麼同時成功
​ 要麼一個都別想成功,稱之爲事務的原子性python

二丶事務的做用

保證了對數據操做的數據安全性mysql

案例:用交行的卡操做建行ATM機給工商的帳戶轉錢sql

三丶事務應該具備的4個屬性(重點)

原子性、一致性、隔離性、持久性。這四個屬性一般稱爲ACID特性數據庫

  1. 原子性(atomicity)。一個事務是一個不可分割的工做單位,事務中包括的諸操做要麼都作,要麼都不作。
  2. 一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另外一個一致性狀態。一致性與原子性是密切相關的。
  3. 隔離性(isolation)。一個事務的執行不能被其餘事務干擾。即一個事務內部的操做及使用的數據對併發的其餘事務是隔離的,併發執行的各個事務之間不能互相干擾。
  4. 持久性(durability)。持久性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其餘操做或故障不該該對其有任何影響。

四丶事務的實現

create table user(
id int primary key auto_increment,
name char(32),
balance int
);

insert into user(name,balance)
values
('wsb',1000),
('egon',1000),
('ysb',1000);

# 修改數據以前先開啓事務操做
start transaction;

# 修改操做
update user set balance=900 where name='wsb'; #買支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
update user set balance=1090 where name='ysb'; #賣家拿到90元

# 回滾到上一個狀態
rollback;

# 開啓事務以後,只要沒有執行commit操做,數據其實都沒有真正刷新到硬盤
commit;
"""開啓事務檢測操做是否完整,不完整主動回滾到上一個狀態,若是完整就應該執行commit操做"""

# 站在python代碼的角度,應該實現的僞代碼邏輯,
try:
    update user set balance=900 where name='wsb'; #買支付100元
    update user set balance=1010 where name='egon'; #中介拿走10元
    update user set balance=1090 where name='ysb'; #賣家拿到90元
except 異常:
    rollback;
else:
    commit;
相關文章
相關標籤/搜索