解釋和演示一下何為「事務的不可重複讀」 「幻影讀」

2022-05-08 09:36:13 字數 1387 閱讀 8144

不可重複讀(幻影現象)可重複讀

mysql預設情況下是可重複讀,解決了幻影問題

mysql> show variables like 『%tx%』;

| variables_name |  value          |

| tx_isolation     |repeatable-read |

| tx_read_only    | off            |

改成 read-committed(已提交讀)後,出現幻影讀

mysql> set @@session.tx_isolation = 'read-committed';

query ok, 0 rows affected (0.00 sec)

演示幻影讀:

a:設定隔離級別為已提交讀:

mysql>set @@session.tx_isolation = 'read-committed';

query ok, 0 rows affected (0.00 sec)

對這4行資料加了鎖:對錶加

is鎖,對4行加

x行鎖,事務沒有提交

mysql> select * from t2 where name=』

abc』

for uodate;

|id  | name |

|1  | abc |

|3  |abc |

|8  |abc |

|10 |abc |

4 rows in set (0.01 sec)

b:設定隔離級別為已提交讀:

mysql>set @@session.tx_isolation = 'read-committed';

query ok, 0 rows affected (0.00 sec)

對t2表插入

name

為abc

的資料,成功了:

mysql> insert into t2(name) values(『abc』);

a:再去執行,發現成了5行

name

為abc

的資料:

mysql> select * from t2 where name=』

abc』

for uodate;

|id  | name |

|1  | abc  |

|3  |abc   |

|8  |abc  |

|10 |abc   |

|16| abc   |

4 rows in set (0.01 sec)

一會4行,一會

5行,如果把這個引數設定成已提交讀,就出現了幻影現象。

說一下事務的特性

如果資料庫聲稱支援事務的操作,那麼該資料庫必須要準備以下四個特性 列表內容 1 原子性 原子性是指事務包含的所有對資料庫的操作要麼全部成功,要麼全部失敗,因此可以理解事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何的修改 2 一致性 一致性是指事務必須使資料庫從乙個一致性...

通俗的解釋一下正規化

正規化是什麼呢?比如拷貝來一段瞅瞅 正規化是符合某一種級別的關係模式的集合。關聯式資料庫中的關係必須滿足一定的要求,滿足不同程度要求的為不同正規化。我知道不用說,你肯定一臉懵逼!因為我也是!下面我就通俗的來解釋一下三大正規化吧,不喜勿噴,個人理解 第一正規化 其實就是讓列保持原子性,原子性就是不能再...

解釋一下尾遞迴的含義

usr bin python3 def fact n return fact iter n,1 def fact iter num,product if num 1 return product return fact iter num 1,num product print fact 4 定義函式...