MySQL - Giao dịch: Hướng dẫn cho người mới bắt đầu
Xin chào các nhà法师数据库 tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của các giao dịch MySQL. Đừng lo lắng nếu bạn mới làm quen với lập trình - tôi sẽ là người bạn thân thiện của bạn, giải thích các khái niệm phức tạp thành những phần nhỏ, dễ tiêu hóa. Vậy, hãy lấy một ly đồ uống yêu thích của bạn, và chúng ta cùng bắt đầu!
Các giao dịch MySQL
Hãy tưởng tượng bạn đang ở ngân hàng, thực hiện một giao dịch chuyển tiền từ tài khoản tiết kiệm của bạn sang tài khoản thanh toán. Bạn không muốn tiền biến mất khỏi tài khoản tiết kiệm mà không xuất hiện trong tài khoản thanh toán, phải không? Đó là lúc các giao dịch phát huy tác dụng!
Trong MySQL, một giao dịch là một chuỗi các thao tác được coi là một đơn vị công việc duy nhất. Nó giống như một quả bóng bảo vệ xung quanh một tập hợp các thao tác cơ sở dữ liệu, đảm bảo rằng chúng hoặc tất cả thành công hoặc tất cả thất bại cùng nhau.
Hãy xem một ví dụ đơn giản:
START TRANSACTION;
UPDATE savings_account SET balance = balance - 100 WHERE account_id = 123;
UPDATE checking_account SET balance = balance + 100 WHERE account_id = 456;
COMMIT;
Trong giao dịch này, chúng ta đang chuyển $100 từ tài khoản tiết kiệm sang tài khoản thanh toán. Lệnh START TRANSACTION
bắt đầu giao dịch của chúng ta, và lệnh COMMIT
ở cuối làm cho các thay đổi trở nên vĩnh viễn.
Các tính chất của giao dịch
Các giao dịch trong MySQL tuân theo các tính chất ACID. Không phải là loại axit bạn tìm thấy trong phòng thí nghiệm! ACID viết tắt của:
- Atomicity: Tất cả các thao tác trong giao dịch thành công hoặc tất cả thất bại.
- Consistency: Cơ sở dữ liệu vẫn ở trạng thái nhất quán trước và sau giao dịch.
- Isolation: Các giao dịch được cách ly với nhau cho đến khi chúng hoàn thành.
- Durability: Một khi giao dịch được cam kết, nó vẫn như vậy ngay cả trong trường hợp có sự cố hệ thống.
Hãy nghĩ về ACID như một thiên thần bảo vệ của các thao tác cơ sở dữ liệu của bạn, đảm bảo mọi thứ luôn gọn gàng và ngăn nắp!
Các câu lệnh giao dịch trong MySQL
MySQL cung cấp nhiều câu lệnh để quản lý giao dịch. Hãy xem chúng trong bảng sau:
Câu lệnh | Mô tả |
---|---|
START TRANSACTION | Bắt đầu một giao dịch mới |
COMMIT | Lưu các thay đổi vĩnh viễn vào cơ sở dữ liệu |
ROLLBACK | Hoàn tác các thay đổi trong giao dịch hiện tại |
SET autocommit | Bật hoặc tắt chế độ tự động cam kết |
SAVEPOINT | Tạo một điểm trong giao dịch để sau này có thể hoàn tác |
Bây giờ, hãy tìm hiểu chi tiết hơn về từng câu lệnh này.
Lệnh COMMIT
Lệnh COMMIT
giống như nút "lưu" cho giao dịch của bạn. Khi bạn cam kết, tất cả các thay đổi bạn đã thực hiện trở nên vĩnh viễn.
START TRANSACTION;
INSERT INTO students (name, age) VALUES ('Alice', 20);
INSERT INTO students (name, age) VALUES ('Bob', 22);
COMMIT;
Sau lệnh COMMIT
này, Alice và Bob chính thức trở thành một phần của bảng students. Chào mừng aboard, Alice và Bob!
Lệnh AUTOCOMMIT
Mặc định, MySQL hoạt động trong chế độ tự động cam kết, có nghĩa là mỗi câu lệnh được coi là một giao dịch riêng biệt. Bạn có thể tắt chế độ này như sau:
SET autocommit = 0;
Bây giờ, bạn cần手动 cam kết các thay đổi của mình. Nó giống như tắt chế độ tự động lưu trong một trò chơi điện tử - hãy chắc chắn rằng bạn nhớ lưu (cam kết) thường xuyên!
Lệnh ROLLBACK
ROLLBACK
là nút "hoàn tác" của bạn. Nếu điều gì đó sai sót trong giao dịch của bạn, bạn có thể sử dụng ROLLBACK
để hoàn tác tất cả các thay đổi.
START TRANSACTION;
DELETE FROM students WHERE name = 'Alice';
-- Ồ! Chúng tôi không có ý định xóa Alice!
ROLLBACK;
Uff! Alice vẫn an toàn trong cơ sở dữ liệu của chúng ta. Nhớ rằng, ROLLBACK
chỉ hoạt động với các thay đổi chưa được cam kết.
Lệnh SAVEPOINT
SAVEPOINT
cho phép bạn tạo một điểm kiểm tra trong giao dịch. Bạn có thể hoàn tác đến điểm này nếu cần.
START TRANSACTION;
INSERT INTO students (name, age) VALUES ('Charlie', 21);
SAVEPOINT charlie_added;
INSERT INTO students (name, age) VALUES ('David', 23);
-- Ồ! Chúng tôi chỉ muốn thêm Charlie
ROLLBACK TO SAVEPOINT charlie_added;
COMMIT;
Trong kịch bản này, Charlie gia nhập lớp, nhưng David không được chọn. Xấu số cho David!
Các loại bảng hỗ trợ giao dịch trong MySQL
Không phải tất cả các loại bảng trong MySQL đều hỗ trợ giao dịch. Các engine lưu trữ chính hỗ trợ giao dịch là:
- InnoDB
- NDB Cluster
InnoDB là loại được sử dụng phổ biến nhất và là mặc định trong các phiên bản MySQL gần đây. Nó giống như chiếc dao đa năng của MySQL - linh hoạt và đáng tin cậy!
Các giao dịch sử dụng chương trình khách
Khi sử dụng chương trình khách MySQL như client dòng lệnh, bạn có thể sử dụng các câu lệnh giao dịch mà chúng ta đã thảo luận. Dưới đây là một câu chuyện nhỏ để minh họa:
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO pet_shop (pet_name, species) VALUES ('Fluffy', 'cat');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO pet_shop (pet_name, species) VALUES ('Rover', 'dog');
Query OK, 1 row affected (0.01 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.02 sec)
Và chỉ như vậy, Fluffy con mèo và Rover con chó đã tìm thấy ngôi nhà mới trong cơ sở dữ liệu cửa hàng thú cưng của chúng ta!
Nhớ rằng, các giao dịch là bạn của bạn trong việc duy trì tính toàn vẹn dữ liệu. Chúng đảm bảo rằng các thao tác cơ sở dữ liệu của bạn đáng tin cậy, ngay cả khi mọi thứ không diễn ra như kế hoạch. Hãy gyak tập sử dụng các giao dịch trong các thao tác MySQL của bạn, và bạn sẽ nhanh chóng trở thành một nhà法师数据库!
Đó là tất cả cho bài học hôm nay về các giao dịch MySQL. Tôi hy vọng bạn đã thích hành trình này như tôi đã làm. Hãy gyak tập, luôn tò mò và chúc bạn viết mã vui vẻ!
Credits: Image by storyset