Dalam Structured Query Language, TCL adalah singkatan dari Transaction Control Language. Satu unit kerja dalam database terbentuk setelah eksekusi perintah secara berurutan dikenal sebagai transaksi.
Ada beberapa perintah dalam Structured Query Language, dan perintah Transaction Control Language adalah salah satu perintah SQL. Perintah TCL menangani transaksi dalam database
Dalam Structured Query Language, Commit, Rollback, dan Savepoint adalah perintah Bahasa Kontrol Transaksi yang banyak digunakan di SQL.
Sekarang mari kita pahami dan pelajari cara kerja perintah Bahasa Kontrol Transaksi dalam bahasa Kueri Terstruktur dengan bantuan beberapa contoh. Perintah Bahasa Kontrol Transaksi adalah:
- Perintah COMMIT
- Perintah ROLLBACK
- Perintah SAVEPOINT
Perintah COMMIT
Perintah Komit dalam SQL digunakan untuk menyimpan semua transaksi yang berubah secara permanen ke disk. Setiap kali kita melakukan operasi pada perintah Data Definition Language (DDL) seperti perintah INSERT, perintah UPDATE, dan perintah DELETE, modifikasi apa pun yang dilakukan oleh perintah ini bersifat permanen tetapi sebelum menutup sesi saat ini atau hingga akhir sesi. Kami dapat dengan mudah membatalkan operasi yang kami lakukan menggunakan Bahasa Definisi Data sebelum sesi ditutup. Perintah komit digunakan untuk menyimpan modifikasi secara permanen ke penyimpanan tanpa sesi berakhir.
Sintaks:
COMMIT;
Jika Anda memiliki database yang sudah ada di sistem, gunakan database yang sudah ada atau buat database baru. Kami akan menggunakan database Perusahaan yang ada.
USE Company
Pertimbangkan tabel karyawan yang sudah ada yang memiliki data tertentu:
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
Dalam SQL, kueri MULAI TRANSAKSI digunakan untuk memulai transaksi.
START TRANSACTION;
Sekarang, kita akan memasukkan dua record ke dalam tabel Karyawan yang ada. Untuk menyisipkan beberapa record, kita akan menggunakan pernyataan di bawah ini:
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);
Kami sekarang akan menggunakan kueri SELECT untuk memverifikasi apakah catatan berhasil dimasukkan ke dalam tabel atau tidak.
SELECT * FROM EMPLOYEES;
Keluaran pada kueri di atas:
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
4002 | ASHWINI | BAGHAT | 54500 | JAIPUR | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | UJI | 4 |
Outputnya menunjukkan semua record berhasil dimasukkan.
Untuk menyimpan operasi INSERT pada tabel Karyawan, kita akan menjalankan perintah COMMIT.
COMMIT;
Di SQL, secara default, komit otomatis aktif. Untuk menonaktifkan komit otomatis di SQL, setel nilai komit otomatis ke 0.
Kami akan memperbarui id karyawan 4002 dan menetapkan kota sebagai 'Noida. Gunakan kueri di bawah ini untuk memperbarui catatan karyawan.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Kami sekarang akan menggunakan kueri SELECT untuk memverifikasi apakah catatan berhasil diperbarui atau tidak dalam tabel.
SELECT * FROM EMPLOYEES;
Keluaran pada kueri di atas:
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | UJI | 4 |
Seperti yang bisa kita lihat di output, Employee Id 4002 city telah dimodifikasi.
Untuk menyimpan perubahan pada tabel karyawan, kita akan menulis perintah COMMIT.
COMMIT;
Sekarang, kami akan menghapus id karyawan 4003 dari tabel Karyawan. Gunakan kueri di bawah ini untuk menghapus catatan karyawan.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Kami sekarang akan menggunakan kueri SELECT untuk memverifikasi apakah catatan berhasil dihapus atau tidak dalam tabel.
SELECT * FROM EMPLOYEES;
Keluaran pada kueri di atas:
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Output mengonfirmasi bahwa kami menghapus detail id karyawan 4003.
Untuk menyimpan perubahan pada tabel karyawan, kita akan menulis perintah COMMIT.
COMMIT;
Perintah SAVEPOINT
Operasi database yang dilakukan dapat dibagi menjadi dua bagian. Misalnya, pertimbangkan semua pernyataan hapus yang kami lakukan sebagai satu segmen transaksi dan pernyataan pembaruan sebagai satu segmen transaksi. Untuk menyimpan kueri sisipkan ke bagian sisipkan dan hapus kueri ke bagian hapus dari transaksi yang sama, kami menggunakan perintah SAVEPOINT di SQL. Misalkan kita ingin menyimpan semua kueri terkait penghapusan dengan savepoint bernama delete. Untuk menyimpan semua operasi terkait penghapusan dalam satu savepoint, kita harus melakukan perintah SAVEPOINT diikuti dengan nama savepoint setelah melakukan query delete.
Sintaks:
SAVEPOINT savepoint name;
Perintah ROLLBACK
Saat melakukan transaksi, kami membangun savepoint untuk menyimpan berbagai segmen transaksi. Saat persyaratan Pengguna berubah, Pengguna dapat membatalkan transaksi ke savepoint yang berbeda. Pertimbangkan skenario:Kami telah memulai transaksi diikuti dengan pembuatan tabel dan penyisipan catatan ke dalam tabel. Kami membangun INS bernama savepoint setelah menambahkan catatan ke tabel. Setelah Penyisipan, kami melakukan operasi penghapusan, dan kemudian kami ingat salah menghapus catatan yang salah. Kami akan membatalkan transaksi kami untuk mencapai INS savepoint. Untuk membatalkan transaksi, gunakan perintah ROLLBACK.
Kami dapat memutar kembali operasi yang kami lakukan atau memutar kembali seluruh transaksi savepoint.
Sintaks untuk Mengembalikan operasi:
ROLLBACK;
Sintaks untuk Mengembalikan transaksi:
ROLLBACK TO savepoint;
Contoh perintah SAVEPOINT dan ROLLBACK:
Jika Anda memiliki database yang sudah ada di sistem, gunakan database yang sudah ada atau buat database baru. Kami akan memilih database yang sudah ada bernama Perusahaan.
USE Company
Pertimbangkan tabel karyawan yang ada yang memiliki catatan berikut:
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Dalam SQL, kueri MULAI TRANSAKSI digunakan untuk memulai transaksi.
START TRANSACTION;
Sekarang, kita akan menyisipkan dua record pada tabel Karyawan yang ada. Untuk menyisipkan beberapa record kita akan menggunakan pernyataan di bawah ini:
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);
Kami sekarang akan menggunakan kueri SELECT untuk memverifikasi apakah catatan berhasil dimasukkan ke dalam tabel atau tidak.
SELECT * FROM EMPLOYEES;
Keluaran pada kueri di atas:
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | UJI | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Seperti yang kita semua tahu, perintah SAVEPOINT dalam SQL digunakan untuk menyimpan bagian yang berbeda dari transaksi yang sama. Asumsikan, Insertion adalah salah satu segmen dari transaksi kita. Gunakan savepoint untuk menyimpan segmen penyisipan ini sebagai Penyisipan.
SAVEPOINT Insertion;
Sekarang, kita akan melakukan operasi UPDATE pada tabel Karyawan, dan kita akan memperbarui gaji karyawan sebesar 1,2 untuk id karyawan 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Kami akan memeriksa silang operasi pembaruan dengan menjalankan kueri SELECT pada tabel Karyawan:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
2003 | RUCHIKA | JAIN | 60000 | MUMBAI | UJI | 4 |
Hasil kueri di atas menunjukkan bahwa catatan id karyawan 2003 berhasil diperbarui.
Pertimbangkan kueri pembaruan sebagai satu segmen dari transaksi kami. Kami akan menyimpan bagian operasi pembaruan menggunakan SAVEPOINT bernama Pembaruan.
SAVEPOINT Updation;
Sekarang, kita akan melakukan operasi hapus pada tabel Karyawan. Kami akan melakukan operasi penghapusan pada tabel karyawan di mana gaji karyawan lebih besar dari 60000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Kami akan memeriksa silang operasi penghapusan dengan menjalankan kueri SELECT pada tabel Karyawan:
SELECT * FROM EMPLOYEES;
Keluaran pada kueri di atas:
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2003 | RUCHIKA | JAIN | 60000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | UJI | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |
Kueri di atas menunjukkan bahwa penghapusan catatan karyawan berhasil.
Pertimbangkan kueri penghapusan sebagai satu segmen dari transaksi kami. Kami akan menyimpan bagian operasi pembaruan menggunakan SAVEPOINT bernama Penghapusan.
SAVEPOINT Deletion;
Tiba-tiba Pengguna menyadari kueri yang ingin kami lakukan pada operasi penghapusan tidak seharusnya kueri itu. Dalam situasi seperti itu, pengguna akan memutar kembali seluruh transaksi ke SAVEPOINT; Pengguna dapat memutar kembali ke SAVEPOINT mana pun yang ingin dia putar kembali seperti Penyisipan, Pembaruan SAVEPOINT.
ROLLBACK TO Insertion;
Jika pengguna tidak ingin menghapus catatan. Oleh karena itu, Pengguna akan dikembalikan ke SAVEPOINT Penyisipan.
Untuk memeriksa silang bahwa kami telah mendapatkan tabel karyawan yang sama dengan yang kami miliki sebelum melakukan operasi pembaruan dan penghapusan. Untuk mengambil detail karyawan, lakukan operasi SELECT pada tabel karyawan.
SELECT * FROM EMPLOYEES;
KARYAWAN | FIRST_NAME | LAST_NAME | GAJI | KOTA | DEPARTEMEN | MANAGERID |
1001 | VAIBHAVI | MISHRA | 65000 | PUNE | ORACLE | 1 |
1002 | VAIBHAV | SHARMA | 60000 | NOIDA | ORACLE | 1 |
1003 | NIKHIL | VANI | 50.000 | JAIPUR | FMW | 2 |
2001 | PRACHI | SHARMA | 55500 | CHANDIGARH | ORACLE | 1 |
2002 | BHAVESH | JAIN | 65500 | PUNE | FMW | 2 |
2003 | RUCHIKA | JAIN | 50.000 | MUMBAI | UJI | 4 |
3001 | PRANOTI | SHENDE | 55500 | PUNE | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | JAIPUR | FMW | 2 |
3003 | DEEPAM | JAUHARI | 58500 | MUMBAI | JAVA | 3 |
4001 | RAJESH | BAIK | 60500 | MUMBAI | UJI | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | DHANDEKAR | 57000 | PUNE | UJI | 4 |
5001 | ASHWIN | PATEL | 54500 | JAIPUR | JAVA | 3 |