SQL Transaction – 1. Tổng quan

Author: - Posted: 01/07/23 - Update: 24/07/23

A. Các loại Anomaly

1. Dirty Reads

Transaction 2 đọc dữ liệu chưa đươc commit ở transaction 1

1 2 DATA
START TRANSACTION;   id = 1, username = 'Alice'
UPDATE user SET username = 'Bob' WHERE id = '1'; START TRANSACTION; id = 1, username = 'Bob'
  SELECT username FROM user where id = '1'; id = 1, username = 'Bob'
  COMMIT;  
ROLLBACK;   id = 1, title = 'Alice'

2. Nonrepeatable Reads

- Transaction 2 đọc dữ liệu 2 lần ra 2 kết quả khác nhau

1 2 DATA
   START TRANSACTION; id = 1, username = 'Alice'
 START TRANSACTION; SELECT username FROM user where id = '1'; id = 1, username = 'Alice'
 UPDATE user SET username = 'Bob' WHERE id = '1';   id = 1, username = 'Bob'
 COMMIT; SELECT username FROM user where id = '1'; id = 1, title = 'Bob'
  COMMIT;  

3. Phantom Record: Bản ghi ma

- Bản ghi 'Bob' đã được thêm và làm cho kết quả đọc 2 lần sai lệch

1 2 DATA
START TRANSACTION;  START TRANSACTION;  
  SELECT username FROM user where group_id = '1'; 'Alice'
 INSERT INTO user (id, group_id, username) VALUES (4,1,'Bob')    
  SELECT username FROM user where group_id = '1'; 'Alice','Bob'
 COMMIT; COMMIT;  

B. Isolation level

  Read Uncommitted Read Committed Repeatable Read Serializable
 UPDATE đợi transaction khác COMMIT UPDATE  Y  Y  Y  Y
 SELECT đợi transaction khác COMMIT UPDATE  N  Y  Y  Y
 LOCK khi SELECT (không cho transaction khác update)  N  N  Y   Y
 LOCK khi SELECT (không cho transaction khác delete, insert)  N  N  N  Y
         
 Dirt Read  Y  N  N  N
 Nonerepeatable Read  Y  Y  N  N
 Fantom Read  Y  Y  Y  N