Database
 sql >> Base de Dados >  >> RDS >> Database

Comandos TCL em SQL


Em Structured Query Language, TCL é uma abreviação de Transaction Control Language. Uma única unidade de trabalho em um banco de dados é formada após a execução consecutiva de comandos ser conhecida como transação.

Existem alguns comandos na Linguagem de Consulta Estruturada, e o comando Linguagem de Controle de Transação é um dos comandos SQL. Comandos TCL manipulam as transações em um banco de dados

Em Structured Query Language, Commit, Rollback e Savepoint são os comandos da Transaction Control Language amplamente utilizados em SQL.

Agora vamos entender e aprender como os comandos da Linguagem de Controle de Transações funcionam na linguagem de Consulta Estruturada com a ajuda de alguns exemplos. Os comandos da Linguagem de Controle de Transação são:
  1. Comando COMMIT
  2. Comando ROLLBACK
  3. Comando SAVEPOINT

Comando COMMIT

O comando Commit em SQL é usado para salvar todas as transações que mudam permanentemente no disco. Sempre que realizamos a operação nos comandos da Linguagem de Definição de Dados (DDL), como o comando INSERT, o comando UPDATE e o comando DELETE, quaisquer modificações feitas por esses comandos são permanentes, mas antes de fechar a sessão atual ou até o final da sessão. Podemos desfazer facilmente a operação que realizamos usando a linguagem de definição de dados antes que a sessão seja encerrada. O comando Commit é usado para salvar a modificação permanentemente no armazenamento sem que a sessão seja encerrada.

Sintaxe:
COMMIT;

Se você tiver um banco de dados existente no sistema, use esse banco de dados existente ou crie um novo banco de dados. Usaremos o banco de dados existente da Empresa.
USE Company

Considere as tabelas de funcionários já existentes que possuem determinados dados:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4

No SQL, a consulta START TRANSACTION é usada para iniciar a transação.
START TRANSACTION;           

Agora, vamos inserir dois registros na tabela Employees existente. Para inserir vários registros, usaremos a instrução abaixo:
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);

Agora usaremos a consulta SELECT para verificar se os registros foram inseridos com sucesso ou não na tabela.
SELECT * FROM EMPLOYEES;

Resultado na consulta acima:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 JAIPUR JAVA 3
4003 PURVA DHANDEKAR 57.000 PUNE TESTE 4

A saída mostra que todos os registros foram inseridos com sucesso.

Para salvar a operação INSERT na tabela Employees, executaremos o comando COMMIT.
COMMIT;

No SQL, por padrão, a confirmação automática está ativada. Para desativar a confirmação automática no SQL, defina o valor de confirmação automática como 0.

Atualizaremos o ID do funcionário 4002 e definiremos a cidade como 'Noida. Use a consulta abaixo para atualizar o registro do funcionário.
UPDATE EMPLOYEES SET CITY = 'NOIDA' WHERE EMPLOYEEID = 4002;

Agora usaremos a consulta SELECT para verificar se o registro foi atualizado com sucesso ou não na tabela.
SELECT * FROM EMPLOYEES;

Resultado na consulta acima:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57.000 PUNE TESTE 4

Como podemos ver na saída, a cidade do ID do funcionário 4002 foi modificada.

Para salvar as alterações na tabela dos funcionários, escreveremos um comando COMMIT.
COMMIT;

Agora, vamos excluir o ID do funcionário 4003 da tabela Funcionários. Use a consulta abaixo para excluir o registro do funcionário.
DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;

Agora usaremos a consulta SELECT para verificar se o registro foi excluído com sucesso ou não na tabela.
SELECT * FROM EMPLOYEES;

Resultado na consulta acima:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3

A saída confirma que excluímos os detalhes do ID do funcionário 4003.

Para salvar as alterações na tabela dos funcionários, escreveremos um comando COMMIT.
COMMIT;

Comando SAVEPOINT

As operações de banco de dados realizadas podem ser divididas em duas partes. Por exemplo, considere todas as instruções de exclusão que realizamos como um segmento da transação e a instrução de atualização como um segmento da transação. Para salvar consultas de inserção na parte de inserção e consultas de exclusão na parte de exclusão da mesma transação, usamos o comando SAVEPOINT no SQL. Suponha que queremos salvar todas as consultas relacionadas à exclusão com o ponto de salvamento denominado delete. Para salvar todas as operações relacionadas à exclusão em um ponto de salvamento, temos que executar o comando SAVEPOINT seguido do nome do ponto de salvamento após realizar a consulta de exclusão.

Sintaxe:
SAVEPOINT savepoint name; 

Comando ROLLBACK

Ao realizar uma transação, construímos os pontos de salvamento para salvar os diferentes segmentos da transação. À medida que os requisitos do usuário mudam, o usuário pode desfazer a transação para diferentes pontos de salvamento. Considere um cenário:Iniciamos uma transação seguida pela criação da tabela e inserção do registro na tabela. Construímos o ponto de salvamento INS nomeado após adicionar registros à tabela. Após a Inserção, realizamos a operação de exclusão e, posteriormente, lembramos que excluímos erroneamente os registros errados. Iremos desfazer nossa transação para alcançar o ponto de salvamento INS. Para desfazer a transação, use o comando ROLLBACK.

Podemos reverter a operação que realizamos ou reverter toda a transação do ponto de salvamento.

Sintaxe para reverter a operação:
ROLLBACK;

Sintaxe para reverter a transação:
ROLLBACK TO savepoint;

Exemplos dos comandos SAVEPOINT e ROLLBACK:

Se você tiver um banco de dados existente no sistema, use esse banco de dados existente ou crie um novo banco de dados. Vamos selecionar o banco de dados já existente chamado Empresa.
USE Company

Considere as tabelas de funcionários existentes que possuem os seguintes registros:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3

No SQL, a consulta START TRANSACTION é usada para iniciar a transação.
START TRANSACTION;           

Agora, vamos inserir dois registros na tabela Employees existente. Para inserir vários registros, usaremos a instrução abaixo:
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);

Agora usaremos a consulta SELECT para verificar se os registros foram inseridos com sucesso ou não na tabela.
SELECT * FROM EMPLOYEES;

Resultado na consulta acima:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57.000 PUNE TESTE 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3

Como todos sabemos, o comando SAVEPOINT em SQL é usado para salvar diferentes partes da mesma transação. Suponha que a Inserção seja um segmento de nossa transação. Use o ponto de salvamento para salvar este segmento de inserção como Inserção.
SAVEPOINT Insertion;

Agora, realizaremos a operação UPDATE nas tabelas Employee e atualizaremos o salário do funcionário em 1,2 para o ID do funcionário 2003.
UPDATE EMPLOYEES SET SALARY = SALARY * 1.2 WHERE EMPLOYEEID = 2003;

Faremos uma verificação cruzada da operação de atualização executando a consulta SELECT na tabela Employees:
SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
2003 RUCHIKA JAIN 60.000 MUMBAI TESTE 4

Os resultados da consulta acima mostram que o registro de ID de funcionário 2003 foi atualizado com êxito.

Considere a consulta de atualização como um segmento de nossa transação. Salvaremos a parte da operação de atualização usando um SAVEPOINT chamado Updation.
SAVEPOINT Updation;

Agora, realizaremos uma operação de exclusão na tabela Funcionários. Realizaremos a operação de exclusão na tabela de funcionários onde o salário do funcionário é maior que 60.000.
DELETE FROM EMPLOYEES WHERE SALARY > 60000;

Faremos uma verificação cruzada da operação de exclusão executando a consulta SELECT na tabela Funcionários:
SELECT * FROM EMPLOYEES;

Resultado na consulta acima:
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2003 RUCHIKA JAIN 60.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57.000 PUNE TESTE 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3

A consulta acima mostra que a exclusão dos registros de funcionários foi bem-sucedida.

Considere as consultas de exclusão como um segmento de nossa transação. Salvaremos a parte da operação de atualização usando um SAVEPOINT chamado Deletion.
SAVEPOINT Deletion;

De repente, o usuário percebeu que a consulta que queríamos realizar na operação de exclusão não deveria ser essa consulta. Em tal situação, os usuários reverterão a transação inteira para o SAVEPOINT; o usuário pode reverter para qualquer SAVEPOINT que ele queira reverter como Inserção, Atualização SAVEPOINT.
ROLLBACK TO Insertion;

Se o usuário não quiser remover os registros. Portanto, o usuário será revertido para o SAVEPOINT de inserção.

Para verificar se temos a mesma tabela de funcionários que tínhamos antes de realizar as operações de atualização e exclusão. Para recuperar os detalhes dos funcionários, execute a operação SELECT na tabela dos funcionários.
SELECT * FROM EMPLOYEES;
EMPLOYEEID FIRST_NAME LAST_NAME SALÁRIO CIDADE DEPARTAMENTO GERENTE
1001 VAIBHAVI MISHRA 65.000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60.000 NOIDA ORACLE 1
1003 NIQUIL VANI 50.000 JAIPUR FMW 2
2001 PRAQUI SHARMA 55500 CHANDIGARH ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50.000 MUMBAI TESTE 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA QUERER 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 MUMBAI JAVA 3
4001 RAJESH GOUD 60500 MUMBAI TESTE 4
4002 ASHWINI BOLSA 54500 NOIDA JAVA 3
4003 PURVA DHANDEKAR 57.000 PUNE TESTE 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3