Tính ACID của transaction trong SQL
Cảnh báo Spam: Bài đăng này chưa sẵn sàng để xuất bản. Tác giả có thể đã vô tình công khai nó trong quá trình viết. Do đó, bạn nên suy nghĩ trước khi đọc bài bài này.
Tính ACID của transaction trong cơ sở dữ liệu nói chung
1. Atomicity (Tính nguyên tử):
- Đảm bảo các thay đổi trong 1 transaction đều được thực hiện hoặc đều được rollback
2. Consistency (Tính nhất quán):
- Đảm bảo sau khi commit thì tính nhất quán dữ liệu của tất cả các lệnh thay đổi trong 1 transaction phải được giữ nguyên. Ví dụ chỉ còn 50 đô trong tài khoản, nhưng thực hiện giao dịch -70 đô, sau khi tính toán thì lưu số âm, thì đó là không nhất quán => Sẽ không được commit
3. Isolation (Tính cô lập):
- Thể hiện sự cô lập giữa các transaction với nhau, có 4 level setting cho tính cô lập này:
-
Read Uncommitted: Đây là setting cho tính cô lập thấp nhất, setting này có nghĩa là transaction B có thể đọc được giá trị ở transaction A mặc dù transaction A chưa được commit, điều này được gọi là dirty read
- Ví dụ: transaction A begin and read data (10$) -> transaction B updated (20$)-> transaction A read data (20$) -> transaction B commit -> transaction A read data (20$) -> transaction A commit
-
Read committed: Setting này là cùng đọc 1 dữ liệu trong transaction A tại 2 thời điểm trước và sau khi transaction B thực hiện commit thì cho ra 2 kết quả khác nhau, gây ra tính không nhất quán dữ liệu giữa các lần đọc trong cùng 1 transaction A
- Ví dụ: transaction A begin and read data (10$) -> transaction B updated (20$)-> transaction A read data (10$) -> transaction B commit -> transaction A read data (20$) -> transaction A commit
-
Repeatable Read: Ngăn chặn Read committed, nghĩa là transaction A được mở thì dù có thay đổi giá trị của bản ghi của các transaction khác thì khi trong transaction A vẫn giữ nguyên giá trị ban đầu. Nhưng có sự ngoại lệ là số lượng bản ghi vẫn có thể thay đổi trong transaction A, này được gọi là Phantom read
- Ví dụ repeatable read: transaction A begin and read data (10$) -> transaction B updated (20$)-> transaction A read data (10$) -> transaction B commit -> transaction A read data (10$) -> transaction A commit
- Ví dụ phantom read: transaction A begin read 5 records (>30$) -> transaction B add record (35$) -> transaction A read (5 records > 30$) -> transaction B commit -> transaction A read (6 records > 30$) -> transaction A commit
-
Serializable: là mức setting cô lập cao nhất, đảm bảo loại bỏ các transaction cô lập hoàn toàn. Các transaction sẽ đợi nhau, thực hiện tuần tự kể cả khi các transaction thực hiện update các bản ghi khác nhau. Đổi lại thì sẽ hy sinh tính concurrency cho hệ CSDL để lấy tính chính xác cho dữ liệu, hay sử dụng cho các hệ thống ngân hàng tài chính…
-
4. Durability (Tính bền vững):
Là khi transaction đã được commit thì đảm bảo dữ liệu sẽ được lưu xuống disk, ngay cả khi có sự cố xảy ra, mất điện, mất connection...
All rights reserved
Bình luận