В езика за структурирани заявки TCL е съкращение за език за управление на транзакциите. Единична единица работа в база данни се формира, след като последователното изпълнение на команди е известно като транзакция.
Има някои команди в езика на структурираните заявки, а командата на езика за управление на транзакциите е една от SQL командите. TCL командите обработват транзакциите в база данни
В езика на структурираните заявки Commit, Rollback и Savepoint са командите на езика за управление на транзакциите, широко използвани в SQL.
Сега нека разберем и научим как работят командите на езика за управление на транзакциите в езика на структурираните заявки с помощта на няколко примера. Командите на езика за управление на транзакциите са:
- Команда COMMIT
- Команда ROLLBACK
- Команда SAVEPOINT
Команда COMMIT
Commit Command в SQL се използва за запазване на всички транзакции, които се променят за постоянно на диска. Всеки път, когато извършваме операция с команди на езика за дефиниране на данни (DDL), като команда INSERT, команда UPDATE и команда DELETE, каквито и модификации, направени от тези команди, са постоянни, но преди затваряне на текущата сесия или до края на сесията. Можем лесно да отменим операцията, която извършихме с помощта на езика за дефиниране на данни, преди сесията да бъде спряна. Командата Commit се използва за трайно запазване на модификацията в хранилището без края на сесията.
Синтаксис:
COMMIT;
Ако имате съществуваща база данни в системата, използвайте тази база данни или създайте нова база данни. Ще използваме съществуващата база данни Company.
USE Company
Помислете за вече съществуващите таблици на служителите, които съдържат определени данни:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
В SQL заявката START TRANSACTION се използва за започване на транзакцията.
START TRANSACTION;
Сега ще вмъкнем два записа в съществуващата таблица на служителите. За да вмъкнем няколко записа, ще използваме следния израз:
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);
Сега ще използваме заявката SELECT, за да проверим дали записите са вмъкнати успешно или не в таблицата.
SELECT * FROM EMPLOYEES;
Извеждане на горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | ДЖАЙПУР | JAVA | 3 |
4003 | PURVA | ДАНДЕКАР | 57 000 | ПУНА | ТЕСТВАНЕ | 4 |
Резултатът показва, че всички записи са вмъкнати успешно.
За да запазим операцията INSERT в таблицата Employees, ще изпълним командата COMMIT.
COMMIT;
В SQL по подразбиране автоматичното записване е включено. За да изключите автоматичното записване в SQL, задайте стойността за автоматично записване на 0.
Ще актуализираме идентификатора на служителя 4002 и ще зададем града като „Noida. Използвайте заявката по-долу, за да актуализирате записа на служителите.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;
Сега ще използваме заявката SELECT, за да проверим дали записът е актуализиран успешно или не в таблицата.
SELECT * FROM EMPLOYEES;
Извеждане на горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | ДАНДЕКАР | 57 000 | ПУНА | ТЕСТВАНЕ | 4 |
Както можем да видим в изхода, идентификационният номер на служител 4002 град е променен.
За да запазим промените в таблицата на служителите, ще напишем команда COMMIT.
COMMIT;
Сега ще изтрием идентификатора на служител 4003 от таблицата Служители. Използвайте заявката по-долу, за да изтриете записа на служител.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;
Сега ще използваме заявката SELECT, за да проверим дали записът е изтрит успешно или не в таблицата.
SELECT * FROM EMPLOYEES;
Извеждане на горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
Резултатът потвърждава, че сме изтрили данните за идентификатора на служителя 4003.
За да запазим промените в таблицата на служителите, ще напишем команда COMMIT.
COMMIT;
Команда SAVEPOINT
Извършените операции с база данни могат да бъдат разделени на две части. Например, разгледайте всички оператори за изтриване, които изпълнихме като един сегмент от транзакцията, а отчета за актуализиране като един сегмент от транзакцията. За да запазим заявки за вмъкване в частта за вмъкване и изтриване на заявки в частта за изтриване на същата транзакция, ние използваме командата SAVEPOINT в SQL. Да предположим, че искаме да запазим всички свързани с изтриването заявки с точката на запис, наречена delete. За да запазим всички операции, свързани с изтриването, в една точка на запис, трябва да изпълним командата SAVEPOINT, последвана от името на точката на запис, след като изпълним заявката за изтриване.
Синтаксис:
SAVEPOINT savepoint name;
Команда ROLLBACK
Докато извършвахме транзакция, ние изградихме точките за запис, за да запазим различните сегменти от транзакцията. Тъй като изискванията на Потребителя се променят, Потребителят може да отмени транзакцията към различни точки за запис. Помислете за сценарий:Инициирахме транзакция, последвана от създаване на таблица и вмъкване на запис в таблицата. Изградихме INS, наречена точка за запис, след добавяне на записи към таблицата. След вмъкването извършихме операцията за изтриване, а по-късно се сетихме, че по погрешка сме изтрили грешните записи. Ще отменим транзакцията си, за да достигнем до INS точката за запис. За да отмените транзакцията, използвайте командата ROLLBACK.
Можем да върнем обратно извършената от нас операция или цялата транзакция на точката на запис.
Синтаксис за връщане на операцията:
ROLLBACK;
Синтаксис за връщане на транзакцията:
ROLLBACK TO savepoint;
Примери за командите SAVEPOINT и ROLLBACK:
Ако имате съществуваща база данни в системата, използвайте тази база данни или създайте нова база данни. Ще изберем вече съществуващата база данни с име Company.
USE Company
Помислете за съществуващите таблици на служителите, които имат следните записи:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
В SQL заявката START TRANSACTION се използва за започване на транзакцията.
START TRANSACTION;
Сега ще вмъкнем два записа в съществуващата таблица на служителите. За да вмъкнем няколко записа, ще използваме следния израз:
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);
Сега ще използваме заявката SELECT, за да проверим дали записите са вмъкнати успешно или не в таблицата.
SELECT * FROM EMPLOYEES;
Извеждане на горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | ДАНДЕКАР | 57 000 | ПУНА | ТЕСТВАНЕ | 4 |
5001 | ASHWIN | PATEL | 54500 | ДЖАЙПУР | JAVA | 3 |
Както всички знаем, командата SAVEPOINT в SQL се използва за запазване на различни части от една и съща транзакция. Да приемем, че вмъкването е един сегмент от нашата транзакция. Използвайте точка за запис, за да запазите този сегмент за вмъкване като вмъкване.
SAVEPOINT Insertion;
Сега ще извършим операцията АКТУАЛИЗИРАНЕ на таблиците на служителите и ще актуализираме заплатата на служителите с 1.2 за идентификатора на служителя 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;
Ще проверим кръстосано операцията за актуализиране, като изпълним заявката SELECT в таблицата Employees:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
2003 | РУЧИКА | ДЖЕЙН | 60 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
Резултатите от заявката по-горе показват, че записът за идентификация на служителя 2003 е актуализиран успешно.
Разгледайте заявката за актуализиране като един сегмент от нашата транзакция. Ще запазим частта от операцията за актуализиране, използвайки SAVEPOINT, наречена Updation.
SAVEPOINT Updation;
Сега ще извършим операция за изтриване на таблицата служители. Ще извършим операция за изтриване на таблицата на служителите, където заплатата на служителите е по-голяма от 60 000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;
Ще проверим кръстосано операцията за изтриване, като изпълним заявката SELECT в таблицата Employees:
SELECT * FROM EMPLOYEES;
Извеждане на горната заявка:
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2003 | РУЧИКА | ДЖЕЙН | 60 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | ДАНДЕКАР | 57 000 | ПУНА | ТЕСТВАНЕ | 4 |
5001 | ASHWIN | PATEL | 54500 | ДЖАЙПУР | JAVA | 3 |
Горната заявка показва, че изтриването на записите на служителите е било успешно.
Считайте заявките за изтриване като един сегмент от нашата транзакция. Ще запазим частта от операцията за актуализиране с помощта на SAVEPOINT, наречена Изтриване.
SAVEPOINT Deletion;
Изведнъж потребителят разбра, че заявката, която искахме да изпълним при операцията за изтриване, не е трябвало да бъде тази заявка. В такава ситуация потребителите ще се върнат към цялата транзакция до SAVEPOINT; Потребителят може да се върне към всяка ТОЧКА НА ЗАПИСВАНЕ, която иска да върне, като вмъкване, актуализация SAVEPOINT.
ROLLBACK TO Insertion;
Ако потребителят не иска да премахне записите. Следователно потребителят ще бъде върнат обратно към ТОЧКАТА НА ЗАПИСВАНЕ на вмъкване.
За кръстосана проверка дали имаме същата таблица на служителите, която имахме преди да извършим операциите за актуализиране и изтриване. За да извлечете данните за служителите, изпълнете операцията SELECT върху таблицата на служителите.
SELECT * FROM EMPLOYEES;
ИДЕНТИФИКАТОР НА СЛУЖИТЕЛЯ | FIRST_NAME | LAST_NAME | ЗАПЛАТА | ГРАД | ОТДЕЛ | MANAGERID |
1001 | VAIBHAVI | МИШРА | 65 000 | ПУНА | ORACLE | 1 |
1002 | VAIBHAV | ШАРМА | 60 000 | NOIDA | ORACLE | 1 |
1003 | НИХИЛ | VANI | 50 000 | ДЖАЙПУР | FMW | 2 |
2001 | PRACHI | ШАРМА | 55500 | ЧАНДИГАР | ORACLE | 1 |
2002 | BHAVESH | ДЖЕЙН | 65500 | ПУНА | FMW | 2 |
2003 | РУЧИКА | ДЖЕЙН | 50 000 | МУМБАЙ | ТЕСТВАНЕ | 4 |
3001 | PRANOTI | ШЕНДЕ | 55500 | ПУНА | JAVA | 3 |
3002 | ANUJA | WANRE | 50500 | ДЖАЙПУР | FMW | 2 |
3003 | DEEPAM | ДЖАУХАРИ | 58500 | МУМБАЙ | JAVA | 3 |
4001 | РАДЖЕШ | GOUD | 60500 | МУМБАЙ | ТЕСТВАНЕ | 4 |
4002 | ASHWINI | BAGHAT | 54500 | NOIDA | JAVA | 3 |
4003 | PURVA | ДАНДЕКАР | 57 000 | ПУНА | ТЕСТВАНЕ | 4 |
5001 | ASHWIN | PATEL | 54500 | ДЖАЙПУР | JAVA | 3 |