Giao dịch trong sql là quá trình thực hiện một tập hợp các câu lệnh sql. Các câu lệnh này được thực hiện tuần tự một cách độc lập. Khi tất cả các câu lệnh thành công, giao dịch được thực hiện thành công và sau đó tất cả các thay đổi dữ liệu được thực hiện trong giao dịch được lưu vào cơ sở dữ liệu. Tuy nhiên, nếu chỉ một trong số chúng bị lỗi, toàn bộ quá trình sẽ thất bại, điều đó có nghĩa là dữ liệu phải được khôi phục về trạng thái ban đầu (dữ liệu được khôi phục về trạng thái trước khi giao dịch được thực hiện).
Điều này làm tôi nhớ đến git. Khi chúng ta thực hiện lệnh nào muốn lưu thay đổi ở đâu thì chúng ta sẽ tạo savepoint ở đó, nó tương tự như commit trong git, nó cũng lưu bản sao chúng ta muốn mà không ảnh hưởng đến bản gốc. Nhưng sự khác biệt trong một giao dịch là nếu bất kỳ lệnh nào trong nhóm lệnh bị sai hoặc sai, nó sẽ quay trở lại điểm lưu trữ ban đầu trước khi chúng ta thực hiện giao dịch. Một điểm giống nhau nữa giữa 2 thằng này là muốn quay lại savepoint bất kỳ thì chỉ cần chạy lệnh return. Để chứng minh điều này, hãy cũng theo dõi phân tích dưới đây.
Trong sql, các lệnh sau được sử dụng để kiểm soát các giao dịch:
- Gửi: Lưu các thay đổi.
- rollback: Quay lại trạng thái trước khi thay đổi.
- Lưu điểm: Tạo một điểm để khôi phục trong nhóm giao dịch, tức là, khôi phục về điểm trạng thái này.
- Đặt giao dịch: Đặt tên cho giao dịch.
- Các lệnh điều khiển giao dịch chỉ được sử dụng với các lệnh thao tác dữ liệu như chèn, cập nhật và xóa. Nhưng chúng không thể được sử dụng cho các lệnh tạo bảng hoặc xóa bảng, bởi vì các thao tác này được xác định tự động trong cơ sở dữ liệu.
- commit để lưu các thay đổi sau khi giao dịch hoàn tất
- command rollback là quay lại điểm lưu hoặc quay lại trạng thái trước khi thực hiện giao dịch khi bất kỳ lệnh nào không thành công.
- Savepoint là tạo một điểm lưu trữ tại một thời điểm nhất định.
- giải phóng điểm lưu trữ là xóa điểm lưu trữ
- đặt giao dịch là chỉ định xem các đặc điểm của giao dịch là chỉ đọc (read only) hay đọc-ghi (read write)
Giao dịch kết thúc bằng một cam kết hoặc khôi phục.
Khi một giao dịch hoàn chỉnh hoàn tất, lệnh commit phải được gọi. Lệnh này sẽ lưu các thay đổi vào cơ sở dữ liệu
Cú pháp cơ bản của lệnh cam kết như sau:
Ví dụ: giả sử bảng nhân viên có các bản ghi sau:
Ví dụ sau đây xóa bản ghi có tên “nghia” khỏi bảng và đưa các thay đổi vào cơ sở dữ liệu.
Như vậy một hàng trong bảng sẽ bị xóa và câu lệnh select sẽ cho kết quả như sau.
Lệnh
rollback là lệnh kiểm soát giao dịch được sử dụng để đưa giao dịch trở lại trạng thái trước khi các thay đổi không được lưu vào cơ sở dữ liệu. Lệnh rollback chỉ có thể được sử dụng để hoàn tác một giao dịch trước khi nó được thực hiện bằng lệnh commit hoặc rollback cuối cùng.
Cú pháp cơ bản của lệnh rollback như sau:
Ví dụ: giả sử bảng nhân viên có các bản ghi sau:
Bây giờ dùng lệnh rollback, xóa lệnh ten=”nghia” chưa nộp như sau:
Kết quả là thao tác xóa này không ảnh hưởng đến bảng vì nó đã khôi phục các thay đổi trong cơ sở dữ liệu, lệnh select sẽ cho kết quả:
Điểm lưu trữ là một điểm trong giao dịch cho phép bạn hoàn nguyên giao dịch về một điểm nhất định mà không khôi phục giao dịch về trạng thái ban đầu trước khi thay đổi đó. Như tôi đã nói ở trên, phần giới thiệu cũng giống như phần giới thiệu git.
Cú pháp cơ bản của lệnh savepoint như sau:
Lệnh này chỉ tạo các điểm lưu trữ trong báo cáo giao dịch. Sau đó, bạn cần sử dụng rollback để hoàn tác điểm lưu trữ, như sau:
Ví dụ: bạn muốn xóa ba bản ghi khác nhau khỏi bảng nhân viên và bạn muốn tạo một điểm lưu trữ trước mỗi lần xóa để bạn có thể quay lại điểm lưu trữ bất kỳ lúc nào, đưa dữ liệu thích hợp về trạng thái ban đầu .
Giả sử rằng bảng nhân viên có các bản ghi sau:
Đây là một loạt các câu lệnh:
Ở trên, đã xảy ra 3 thao tác xóa dữ liệu. Giả sử bạn đổi ý và quyết định quay lại điểm lưu trữ mà bạn đã xác định là sp2. Vì sp2 được tạo sau thao tác xóa đầu tiên nên hai thao tác xóa cuối cùng đã được khôi phục.
Vì vậy, chỉ lần xóa đầu tiên sẽ xảy ra sau khi quay lại sp2.
Lệnh giải phóng điểm lưu được sử dụng để xóa điểm lưu mà bạn đã tạo. Sau khi bạn xóa một điểm lưu trữ, bạn không còn có thể sử dụng lệnh khôi phục để hoàn tác các giao dịch tới điểm lưu trữ đó. Nó giống như xóa một commit trong git mà bạn không muốn dùng nữa.
Cú pháp giải phóng điểm lưu trữ như sau:
thiết lập giao dịch có thể được sử dụng để khởi tạo một giao dịch cơ sở dữ liệu. Lệnh này được sử dụng để chỉ định các thuộc tính của giao dịch. Ví dụ: bạn có thể chỉ định các giao dịch là chỉ đọc hoặc đọc-ghi.
Cú pháp cơ bản của lệnh thiết lập giao dịch trong SQL như sau:
Lệnh
mà chúng tôi không muốn giữ lại
Nguồn: https://www.tutorialspoint.com/sql/sql-transactions.htm