Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Lệnh TCL trong SQL

Trong Ngôn ngữ truy vấn có cấu trúc, TCL là chữ viết tắt của Ngôn ngữ điều khiển giao dịch. Một đơn vị công việc duy nhất trong cơ sở dữ liệu được hình thành sau khi thực hiện liên tiếp các lệnh được gọi là một giao dịch.

Có một số lệnh trong Ngôn ngữ truy vấn có cấu trúc và lệnh Ngôn ngữ điều khiển giao dịch là một trong các lệnh SQL. Các lệnh TCL xử lý các giao dịch trong cơ sở dữ liệu

Trong ngôn ngữ truy vấn có cấu trúc, commit, Rollback và Savepoint là các lệnh trong ngôn ngữ điều khiển giao dịch được sử dụng rộng rãi trong SQL.

Bây giờ chúng ta hãy hiểu và tìm hiểu cách hoạt động của các lệnh Ngôn ngữ điều khiển giao dịch trong ngôn ngữ Truy vấn có cấu trúc với sự trợ giúp của một số ví dụ. Các lệnh Ngôn ngữ Kiểm soát Giao dịch là:

  1. Lệnh COMMIT
  2. Lệnh ROLLBACK
  3. Lệnh SAVEPOINT

Lệnh COMMIT

Lệnh commit trong SQL được sử dụng để lưu tất cả các giao dịch thay đổi vĩnh viễn vào đĩa. Bất cứ khi nào chúng ta thực hiện thao tác trên các lệnh Ngôn ngữ Định nghĩa Dữ liệu (DDL) chẳng hạn như lệnh INSERT, lệnh UPDATE và lệnh DELETE, bất kỳ sửa đổi nào được thực hiện bởi các lệnh này là vĩnh viễn nhưng trước khi đóng phiên hiện tại hoặc cho đến khi kết thúc phiên. Chúng tôi có thể dễ dàng hoàn tác thao tác mà chúng tôi đã thực hiện bằng Ngôn ngữ định nghĩa dữ liệu trước khi phiên ngừng hoạt động. Lệnh commit được sử dụng để lưu vĩnh viễn sửa đổi vào bộ nhớ mà không có phiên kết thúc.

Cú pháp:

COMMIT;

Nếu bạn có một cơ sở dữ liệu hiện có trong hệ thống, hãy sử dụng cơ sở dữ liệu hiện có đó hoặc tạo một cơ sở dữ liệu mới. Chúng tôi sẽ sử dụng cơ sở dữ liệu hiện có của Công ty.

USE Company

Hãy xem xét các bảng nhân viên hiện có có các dữ liệu nhất định:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4

Trong SQL, truy vấn BẮT ĐẦU GIAO DỊCH được sử dụng để bắt đầu giao dịch.

START TRANSACTION;           

Bây giờ, chúng tôi sẽ chèn hai bản ghi vào bảng Nhân viên hiện có. Để chèn nhiều bản ghi, chúng tôi sẽ sử dụng câu lệnh dưới đây:

INSERT INTO EMPLOYEES (EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT, MANAGERID) VALUES (4002, 'ASHWINI', 'BAGHAT', 54500, 'JAIPUR', 'JAVA', 3), (4003, 'PURVA', 'DHANDEKAR', 57000, 'PUNE', 'TESTING', 4);

Bây giờ chúng ta sẽ sử dụng truy vấn SELECT để xác minh xem các bản ghi có được chèn thành công hay không trong bảng.

SELECT * FROM EMPLOYEES;

Kết quả cho truy vấn trên:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 JAIPUR JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE KIỂM TRA 4

Kết quả hiển thị tất cả các bản ghi đã được chèn thành công.

Để lưu thao tác INSERT trên bảng Nhân viên, chúng tôi sẽ thực hiện lệnh COMMIT.

COMMIT;

Trong SQL, theo mặc định, tự động cam kết được bật. Để tắt tự động cam kết trong SQL, hãy đặt giá trị tự động cam kết thành 0.

Chúng tôi sẽ cập nhật id nhân viên 4002 và đặt thành phố là 'Noida. Sử dụng truy vấn dưới đây để cập nhật hồ sơ nhân viên.

UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;

Bây giờ chúng tôi sẽ sử dụng truy vấn SELECT để xác minh xem bản ghi có được cập nhật thành công hay không trong bảng.

SELECT * FROM EMPLOYEES;

Kết quả cho truy vấn trên:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE KIỂM TRA 4

Như chúng ta có thể thấy trong đầu ra, thành phố Id 4002 của nhân viên đã được sửa đổi.

Để lưu các thay đổi trên bảng của nhân viên, chúng tôi sẽ viết lệnh COMMIT.

COMMIT;

Bây giờ, chúng tôi sẽ xóa id nhân viên 4003 khỏi bảng Nhân viên. Sử dụng truy vấn dưới đây để xóa hồ sơ nhân viên.

DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;

Bây giờ chúng ta sẽ sử dụng truy vấn SELECT để xác minh xem bản ghi có được xóa thành công hay không trong bảng.

SELECT * FROM EMPLOYEES;

Kết quả cho truy vấn trên:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3

Kết quả xác nhận rằng chúng tôi đã xóa chi tiết id 4003 của nhân viên.

Để lưu các thay đổi trên bảng của nhân viên, chúng tôi sẽ viết lệnh COMMIT.

COMMIT;

Lệnh SAVEPOINT

Các hoạt động cơ sở dữ liệu được thực hiện có thể được chia thành hai phần. Ví dụ:hãy coi tất cả các câu lệnh xóa mà chúng tôi đã thực hiện là một phân đoạn của giao dịch và câu lệnh cập nhật là một phân đoạn của giao dịch. Để lưu truy vấn chèn vào phần chèn và xóa truy vấn vào phần xóa của cùng một giao dịch, chúng ta sử dụng lệnh SAVEPOINT trong SQL. Giả sử chúng ta muốn lưu tất cả các truy vấn liên quan đến xóa bằng điểm lưu có tên là delete. Để lưu tất cả các thao tác liên quan đến xóa trong một điểm lưu, chúng ta phải thực hiện lệnh SAVEPOINT theo sau là tên điểm lưu sau khi thực hiện truy vấn xóa.

Cú pháp:

SAVEPOINT savepoint name; 

Lệnh ROLLBACK

Trong khi thực hiện một giao dịch, chúng tôi đã xây dựng các điểm lưu để lưu các phân đoạn khác nhau của giao dịch. Khi yêu cầu của Người dùng thay đổi, Người dùng có thể hoàn tác giao dịch tới các điểm lưu khác nhau. Hãy xem xét một tình huống:Chúng tôi đã bắt đầu một giao dịch, sau đó là tạo bảng và chèn bản ghi vào bảng. Chúng tôi đã xây dựng INS có tên là savepoint sau khi thêm các bản ghi vào bảng. Sau khi Chèn, chúng tôi thực hiện thao tác xóa và sau đó chúng tôi nhớ đã xóa nhầm các bản ghi sai. Chúng tôi sẽ hoàn tác giao dịch của mình để đạt được INS điểm lưu. Để hoàn tác giao dịch, hãy sử dụng lệnh ROLLBACK.

Chúng tôi có thể khôi phục hoạt động mà chúng tôi đã thực hiện hoặc khôi phục toàn bộ giao dịch lưu điểm.

Cú pháp khôi phục hoạt động:

ROLLBACK;

Cú pháp khôi phục giao dịch:

ROLLBACK TO savepoint;

Ví dụ về lệnh SAVEPOINT và ROLLBACK:

Nếu bạn có một cơ sở dữ liệu hiện có trong hệ thống, hãy sử dụng cơ sở dữ liệu hiện có đó hoặc tạo một cơ sở dữ liệu mới. Chúng tôi sẽ chọn cơ sở dữ liệu hiện có có tên Công ty.

USE Company

Hãy xem xét các bảng của nhân viên hiện có có các bản ghi sau:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3

Trong SQL, truy vấn BẮT ĐẦU GIAO DỊCH được sử dụng để bắt đầu giao dịch.

START TRANSACTION;           

Bây giờ, chúng tôi sẽ chèn hai bản ghi trong bảng Nhân viên hiện có. Để chèn nhiều bản ghi, chúng tôi sẽ sử dụng câu lệnh dưới đây:

INSERT INTO EMPLOYEES (EMPLOYEEID, FIRST_NAME, LAST_NAME, SALARY, CITY, DEPARTMENT, MANAGERID) VALUES (4003, 'PURVA', 'DHANDEKAR', 57000, 'PUNE', 'TESTING', 4), (5001, 'ASHWIN', 'PATEL', 54500, 'JAIPUR', 'JAVA', 3);

Bây giờ chúng ta sẽ sử dụng truy vấn SELECT để xác minh xem các bản ghi có được chèn thành công hay không trong bảng.

SELECT * FROM EMPLOYEES;

Kết quả cho truy vấn trên:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE KIỂM TRA 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3

Như chúng ta đã biết, lệnh SAVEPOINT trong SQL được sử dụng để lưu các phần khác nhau của cùng một giao dịch. Giả sử, Chèn là một phân đoạn trong giao dịch của chúng tôi. Sử dụng savepoint để lưu đoạn chèn này dưới dạng Chèn.

SAVEPOINT Insertion;

Bây giờ, chúng tôi sẽ thực hiện thao tác CẬP NHẬT trên bảng Nhân viên và chúng tôi sẽ cập nhật mức lương của nhân viên lên 1,2 cho id nhân viên 2003.

UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;

Chúng tôi sẽ kiểm tra chéo hoạt động cập nhật bằng cách thực hiện truy vấn CHỌN trên bảng Nhân viên:

SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
2003 RUCHIKA JAIN 60000 MUMBAI KIỂM TRA 4

Kết quả truy vấn trên cho thấy rằng bản ghi id nhân viên 2003 đã được cập nhật thành công.

Hãy coi truy vấn cập nhật là một phân đoạn trong giao dịch của chúng tôi. Chúng tôi sẽ lưu phần thao tác cập nhật bằng SAVEPOINT có tên là Bản cập nhật.

SAVEPOINT Updation;

Bây giờ, chúng ta sẽ thực hiện thao tác xóa trên bảng Nhân viên. Chúng tôi sẽ thực hiện thao tác xóa trên bảng nhân viên có mức lương của nhân viên lớn hơn 60000.

DELETE FROM EMPLOYEES WHERE SALARY > 60000;

Chúng tôi sẽ kiểm tra chéo thao tác xóa bằng cách thực hiện truy vấn CHỌN trên bảng Nhân viên:

SELECT * FROM EMPLOYEES;

Kết quả cho truy vấn trên:

EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2003 RUCHIKA JAIN 60000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE KIỂM TRA 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3

Truy vấn trên cho thấy rằng việc xóa hồ sơ nhân viên đã thành công.

Hãy coi các truy vấn xóa là một phân đoạn trong giao dịch của chúng tôi. Chúng tôi sẽ lưu phần thao tác cập nhật bằng cách sử dụng SAVEPOINT có tên là Xóa.

SAVEPOINT Deletion;

Đột nhiên Người dùng nhận ra truy vấn chúng tôi muốn thực hiện trên thao tác xóa không phải là truy vấn đó. Trong tình huống như vậy, người dùng sẽ quay lại toàn bộ giao dịch cho SAVEPOINT; Người dùng có thể quay trở lại bất kỳ SAVEPOINT nào mà họ muốn quay lại như Chèn, Cập nhật SAVEPOINT.

ROLLBACK TO Insertion;

Nếu người dùng không muốn xóa các bản ghi. Do đó, Người dùng sẽ được khôi phục về Insertion SAVEPOINT.

Để kiểm tra chéo xem chúng ta có cùng một bảng nhân viên mà chúng ta đã có trước khi thực hiện các thao tác cập nhật và xóa hay không. Để truy xuất thông tin chi tiết của nhân viên, hãy thực hiện thao tác CHỌN trên bảng nhân viên.

SELECT * FROM EMPLOYEES;
EMPLOYEEID FIRST_NAME LAST_NAME TIỀN LƯƠNG THÀNH PHỐ KHOA MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOIDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 ĐIỀU CHỈNH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 MUMBAI KIỂM TRA 4
3001 PRANOTI CHIA SẺ 55500 PUNE JAVA 3
3002 ANUJA DÂY 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH MỤC TIÊU 60500 MUMBAI KIỂM TRA 4
4002 ASHWINI TÚI XÁCH 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE KIỂM TRA 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ mục trong SQL là gì?

  2. Giới thiệu về API thu thập đồng thời trong Java

  3. Tối ưu hóa các truy vấn cập nhật

  4. Trực quan hóa dữ liệu bằng Apache Zeppelin - Hướng dẫn

  5. API REST Python với Flask, Connexion và SQLAlchemy - Phần 2