Trang chủTác giảLiên hệ

[MySQL] Transactions

By Đặng Văn Hiến
Published in MySQL
June 08, 2021
2 min read

Một trong những đặc tính tiêu biểu của các hệ quản trị quan hệ ( RDBMS) là Concurrent Control hay nói nôm na chính là cơ chế kiểm soát thực thi đồng thời. Một trong những cơ chế tiêu biểu chính là Transactions. Transactions thì có 4 mức level tương ứng dưới đây.  Read UncommitedRead CommitedRepeatable ReadSerializable

Trước khi tìm hiểu về các ảnh hưởng của từng loại transactions thì ta tìm hiểu 3 lỗi cơ bản liên quan đến việc các xử lý đồng thời. ・ Uncommitted dependency (dirty read): Tác động này xảy ra khi 1 transaction A đọc 1 row khi nó đang được update bởi 1 transaction B khác và chưa được commit. Transaction A sẽ đọc dữ liệu vẫn chưa được commit. Ví dụ 1 người A trong tài khoản có 3 triệu và đang thực hiện 1 giao dịch để nạp vào 2 triệu cho tài khoản. Transaction đã chạy update xong tài khoản lên 5 triệu nhưng vẫn còn 1 số thao tác chưa chạy tới và dữ liệu này vẫn chưa được commit. 1 người B khác dùng chung tài khoản thực hiện kiểm tra số dư, và kết quả trả về là 5 triệu. Giao dịch của người A xảy ra sự cố và báo lỗi, dữ liệu được roll back về 3 triệu. Như vậy người B đang nhận được dữ liệu sai.

Inconsistent analysis (nonrepeatable read): Trường hợp này xảy ra khi 1 transaction A đọc 1 đơn vị dữ liệu nhiều lần và kết quả khác nhau giữa các lần do giữa thời gian đọc của các lân đó, dữ liệu bị 1 transaction khác commit thay đổi.

Phantom reads: xảy ra khi 2 queries giống hệt nhau được thực hiện nhưng list rows kết quả trả về lại khác nhau. Ví dụ, có 2 transaction được thực thi cùng lúc. Hai câu lệnh SELECT trong transaction đầu tiên có thể trả về các kết quả khác nhau vì câu lệnh INSERT trong transaction thứ hai thay đổi dữ liệu được sử dụng bởi cả hai.

Dưới đây chúng ta sẽ tìm hiểu chi tiết hơn tác dụng của từng loại transactions.

1. Read Uncommited

Thường thì các bạn quen vs câu lệnh begin transaction chứ không mấy người hiểu rõ begin transaction thì sẽ xử lý như thế nào. Mỗi loại quản trị cơ sở dữ liệu + storage engine khác nhau thì cơ chế transactions default sẽ khác nhau. Thường chúng ta sẽ chủ yếu dùng level transtation default của hệ quản trị cơ sở dữ liệu mà ko mấy quan tâm nó thuộc level nào.

Vậy làm thế nào để setting được level của transactions trong mysql? Có hai cách ・Thay đổi trực tiếp trong setting của mysql

・ Set luôn level khi start transactions

Process 2:


Đặng Văn Hiến

Related Posts

MySQL
MySQL Architecture ( Part 1)
June 09, 2021
3 min
© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media