Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào chúng ta có thể triển khai một giao dịch MySQL?


Như chúng ta biết rằng trong một giao dịch, các câu lệnh được thực thi như một đơn vị. Nếu bất kỳ hoạt động nào trong giao dịch không thành công, toàn bộ giao dịch sẽ không thành công và phải được khôi phục lại; nếu không, bất kỳ thay đổi nào được thực hiện bởi các câu lệnh sẽ được lưu vào cơ sở dữ liệu. Để triển khai một giao dịch, MySQL cung cấp các câu lệnh sau -

BẮT ĐẦU GIAO DỊCH

Như tên cho thấy, giao dịch bắt đầu bằng câu lệnh này. Về cơ bản, nó thông báo cho MySQL rằng các câu lệnh theo sau phải được coi như một đơn vị công việc duy nhất cho đến khi giao dịch kết thúc.

CAM KẾT

Câu lệnh COMMIT cam kết các thay đổi đối với cơ sở dữ liệu. Nói cách khác, khi hoàn tất một giao dịch thành công, lệnh COMMIT sẽ được đưa ra để các thay đổi đối với tất cả các bảng có liên quan sẽ có hiệu lực.

QUAY LẠI

Lệnh ROLLBACK hoàn tác bất kỳ thay đổi nào được thực hiện bởi câu lệnh và trả cơ sở dữ liệu về trạng thái trước đó, tức là ở trạng thái khi giao dịch bắt đầu.

Ví dụ

Sau đây là một ví dụ để trình bày việc triển khai một giao dịch MySQL -

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO Marks Values(1, 'Aarav','Maths',50);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Marks Values(2, 'Harshit','Maths',55);
Query OK, 1 row affected (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.06 sec)

Trong ví dụ này, giao dịch được bắt đầu bằng câu lệnh BẮT ĐẦU GIAO DỊCH. Hai câu lệnh INSERT sau đó được thực thi theo sau là một câu lệnh COMMIT. Câu lệnh COMMIT sẽ lưu các thay đổi đối với cơ sở dữ liệu có thể được quan sát thấy từ tập kết quả sau đây cho thấy rằng các giá trị đã được chèn vào bảng -

mysql> SELECT * FROM Marks;
 +------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 2    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO Marks Values(1, 'Aarav','History',40);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Marks Values(1, 'Harshit','History',48);
Query OK, 1 row affected (0.00 sec)

mysql> ROLLBACK;
Query OK, 0 rows affected (0.04 sec)

Trong ví dụ này, giao dịch được bắt đầu bằng câu lệnh BẮT ĐẦU GIAO DỊCH. Hai câu lệnh INSERT sau đó được thực thi theo sau là một câu lệnh ROLLBACK. Câu lệnh ROLLBACK sẽ hoàn tác các thay đổi được thực hiện đối với cơ sở dữ liệu có thể được quan sát thấy từ tập kết quả sau cho thấy rằng không có giá trị mới nào được chèn vào bảng -

mysql> SELECT * FROM Marks;
+------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 1    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)