mysql原子性 MySQL事務的原子性

2021-10-17 13:21:44 字數 1268 閱讀 8898

一、事務的acid特性:

1)原子性

2)一致性

3)隔離性

4)永續性

二、對於事務的原子性(a)我們知道事務中的操作要麼都做要麼都不做。對於這一點許多人有錯誤的理解,我們來看乙個例子:

1)mysql> select * from t4;

| id | name |

|  1 | a    |

|  2 | b    |

|  3 | c    |

3 rows in set (0.00 sec)

2)開啟乙個事務

mysql> start transaction;

query ok, 0 rows affected (0.00 sec)

mysql> update t4 set name='aa' where id=1;

query ok, 1 row affected (0.00 sec)

rows matched: 1  changed: 1  warnings: 0

mysql> update t4 set name='bbbbb' where id=2;

error 1406 (22001): data too long for column 'name' at row 2

mysql> commit;

query ok, 0 rows affected (0.03 sec)

mysql> select * from t4;

| id | name |

|  1 | aa   |

|  2 | b    |

|  3 | c    |

3 rows in set (0.01 sec)

結果是不是預想的是不一樣的,id=1的記錄怎麼會執行成功,難道不應該全部回滾嗎?

身邊有不少的人錯誤的理解為:事務中有執行錯誤的語句(error),那麼整個事務都會回滾。

3)總結

我們所說的要麼全成功要麼全失敗,成功與失敗取決於我們最後是commit還是rollback。commit將所有的語句執行,rollback將所有的語句執行撤銷。

上面的例子中,我們是commit操作,即便是有錯誤語句,也會將所有語句執行一次,commit之後將修改的資料重新整理到磁碟持久化。所以對於上面的操作我們應該是rollback。

個人理解:開啟乙個事務後,錯誤的語句會被分析器過濾掉,當我們commit的時候對於mysql來說只有正確的語句(雖然我們知道有條語句是錯誤的),所以在我們捕捉到異常的時候應當將事務顯示的rollback而不是commit。

MySQL事務關於原子性的簡單理解 一

當我們說起原子性的時候,我們會說一系列的操作要麼成功,要麼失敗,來保證事務的原子的,但是我其實特點疑問,事務的原子性是怎麼實現的呢?接下來我嘗試的去記錄我自己的理解。這個undo log 我自己的理解是這樣的,在我們運算元據之前,首先會將資料備份到乙個地方 記憶體中 如果我們進行了資料的修改,或者我...

事務的原子性

a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 1.從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。2.在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在則...

事務的原子性

事務的原子性指的是,事務中包含的程式作為系統的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。原子性的意義是資料庫系統的基礎。也許有的人想大多數程式設計師都沒有需求去寫要求超長時間高穩定性 高健壯性執行的程式。我想這是不負責任的想法。不管你寫的是動態 嵌入式控制...