MySQL數據庫提供了四個事務隔離級別:讀未提交,讀已提交,可重復讀以及串行化。不可重復讀(Non-repeatable Read)是指在同一事務中,讀取同一記錄的兩次查詢結果不同。由于在此過程中出現了未提交的數據,所以導致了數據的不一致。
CREATE TABLE user ( id INT(11) PRIMARY KEY, name VARCHAR(20) NOT NULL, age INT(11) NOT NULL, phone VARCHAR(20) NOT NULL ); -- 添加數據 INSERT INTO user (id, name, age, phone) VALUES (1, '小明', 25, '123456789');
比如,在事務A中執行如下SQL:
START TRANSACTION; SELECT * FROM user WHERE id = 1; -- 查詢結果為 {1, '小明', 25, '123456789'} -- 事務B修改了數據 UPDATE user SET name = '小紅' WHERE id = 1; SELECT * FROM user WHERE id = 1; -- 查詢結果為 {1, '小紅', 25, '123456789'} COMMIT;
而在事務A中,第一次讀取到的用戶信息與第二次讀取到的用戶信息不一致,這就是不可重復讀的現象。
因此,為解決此類問題,我們可以使用MySQL提供的可重復讀隔離級別,保證在同一事務中多次讀取同一記錄的結果相同。
上一篇mysql不可重復觸發器
下一篇在css中size的單位