Database
 sql >> Base de données >  >> RDS >> Database

Commandes TCL en SQL

Dans Structured Query Language, TCL est l'abréviation de Transaction Control Language. Une seule unité de travail dans une base de données est formée après l'exécution consécutive de commandes est connue sous le nom de transaction.

Il existe certaines commandes dans le langage de requête structuré, et la commande Transaction Control Language est l'une des commandes SQL. Les commandes TCL gèrent les transactions dans une base de données

Dans le langage de requête structuré, Commit, Rollback et Savepoint sont les commandes du langage de contrôle des transactions largement utilisées dans SQL.

Comprenons maintenant et apprenons comment les commandes du langage de contrôle des transactions fonctionnent dans le langage de requête structurée à l'aide de quelques exemples. Les commandes du langage de contrôle des transactions sont :

  1. Commande COMMIT
  2. Commande ROLLBACK
  3. Commande SAVEPOINT

Commande COMMIT

La commande Commit dans SQL est utilisée pour enregistrer toutes les transactions qui changent de façon permanente sur le disque. Chaque fois que nous effectuons l'opération sur les commandes du langage de définition de données (DDL) telles que la commande INSERT, la commande UPDATE et la commande DELETE, toutes les modifications apportées par ces commandes sont permanentes mais avant la fermeture de la session en cours ou jusqu'à la fin de la session. Nous pouvons facilement annuler l'opération que nous avons effectuée à l'aide du langage de définition de données avant la fermeture de la session. La commande Commit est utilisée pour enregistrer la modification de manière permanente dans le stockage sans que la session ne se termine.

Syntaxe :

COMMIT;

Si vous avez une base de données existante dans le système, utilisez cette base de données existante ou créez une nouvelle base de données. Nous utiliserons la base de données existante Company.

USE Company

Considérez les tables des employés déjà existantes qui contiennent certaines données :

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4

En SQL, la requête START TRANSACTION est utilisée pour commencer la transaction.

START TRANSACTION;           

Maintenant, nous allons insérer deux enregistrements dans la table Employés existante. Pour insérer plusieurs enregistrements, nous utiliserons la déclaration ci-dessous :

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);

Nous allons maintenant utiliser la requête SELECT pour vérifier si les enregistrements sont insérés avec succès ou non dans la table.

SELECT * FROM EMPLOYEES;

Résultat de la requête ci-dessus :

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4
4002 ASHWINI BAGHAT 54500 JAIPUR JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE TEST 4

La sortie montre que tous les enregistrements ont été insérés avec succès.

Pour enregistrer l'opération INSERT sur la table Employés, nous allons exécuter la commande COMMIT.

COMMIT;

Dans SQL, par défaut, la validation automatique est activée. Pour désactiver la validation automatique dans le SQL, définissez la valeur de validation automatique sur 0.

Nous mettrons à jour l'identifiant de l'employé 4002 et définirons la ville sur "Noida". Utilisez la requête ci-dessous pour mettre à jour le dossier de l'employé.

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

Nous allons maintenant utiliser la requête SELECT pour vérifier si l'enregistrement est mis à jour avec succès ou non dans la table.

SELECT * FROM EMPLOYEES;

Résultat de la requête ci-dessus :

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4
4002 ASHWINI BAGHAT 54500 NOÏDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE TEST 4

Comme nous pouvons le voir dans la sortie, l'identifiant de l'employé 4002 a été modifié.

Pour enregistrer les modifications sur la table des employés, nous allons écrire une commande COMMIT.

COMMIT;

Maintenant, nous allons supprimer l'identifiant d'employé 4003 de la table Employés. Utilisez la requête ci-dessous pour supprimer l'enregistrement de l'employé.

DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;

Nous allons maintenant utiliser la requête SELECT pour vérifier si l'enregistrement est supprimé avec succès ou non dans la table.

SELECT * FROM EMPLOYEES;

Résultat de la requête ci-dessus :

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4
4002 ASHWINI BAGHAT 54500 NOÏDA JAVA 3

La sortie confirme que nous avons supprimé les détails de l'ID d'employé 4003.

Pour enregistrer les modifications sur la table des employés, nous allons écrire une commande COMMIT.

COMMIT;

Commande POINT DE SAUVEGARDE

Les opérations de base de données effectuées peuvent être divisées en deux parties. Par exemple, considérez toutes les instructions de suppression que nous avons effectuées comme un segment de la transaction et l'instruction de mise à jour comme un segment de la transaction. Pour enregistrer les requêtes d'insertion dans la partie insertion et les requêtes de suppression dans la partie suppression de la même transaction, nous utilisons la commande SAVEPOINT dans SQL. Supposons que nous voulions enregistrer toutes les requêtes liées à la suppression avec le point de sauvegarde nommé delete. Pour enregistrer toutes les opérations liées à la suppression dans un point de sauvegarde, nous devons exécuter la commande SAVEPOINT suivie du nom du point de sauvegarde après avoir effectué la requête de suppression.

Syntaxe :

SAVEPOINT savepoint name; 

Commande ROLLBACK

Lors de la réalisation d'une transaction, nous avons construit les points de sauvegarde pour sauvegarder les différents segments de la transaction. Au fur et à mesure que les exigences de l'utilisateur changent, l'utilisateur peut annuler la transaction vers différents points de sauvegarde. Prenons un scénario :nous avons lancé une transaction suivie de la création de la table et de l'insertion d'enregistrements dans la table. Nous avons construit le point de sauvegarde nommé INS après avoir ajouté des enregistrements à la table. Après l'insertion, nous avons effectué l'opération de suppression, et plus tard, nous nous sommes souvenus d'avoir supprimé par erreur les mauvais enregistrements. Nous allons annuler notre transaction pour atteindre le point de sauvegarde INS. Pour annuler la transaction, utilisez la commande ROLLBACK.

Nous pouvons annuler l'opération que nous avons effectuée ou annuler l'intégralité de la transaction de point de sauvegarde.

Syntaxe pour annuler l'opération :

ROLLBACK;

Syntaxe pour annuler la transaction :

ROLLBACK TO savepoint;

Exemples des commandes SAVEPOINT et ROLLBACK :

Si vous avez une base de données existante dans le système, utilisez cette base de données existante ou créez une nouvelle base de données. Nous allons sélectionner la base de données déjà existante nommée Company.

USE Company

Considérez les tables d'employés existantes qui ont les enregistrements suivants :

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4
4002 ASHWINI BAGHAT 54500 NOÏDA JAVA 3

En SQL, la requête START TRANSACTION est utilisée pour commencer la transaction.

START TRANSACTION;           

Maintenant, nous allons insérer deux enregistrements dans la table Employés existante. Pour insérer plusieurs enregistrements, nous utiliserons la déclaration ci-dessous :

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);

Nous allons maintenant utiliser la requête SELECT pour vérifier si les enregistrements sont insérés avec succès ou non dans la table.

SELECT * FROM EMPLOYEES;

Résultat de la requête ci-dessus :

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4
4002 ASHWINI BAGHAT 54500 NOÏDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE TEST 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3

Comme nous le savons tous, la commande SAVEPOINT dans SQL est utilisée pour enregistrer différentes parties de la même transaction. Supposons que l'insertion est un segment de notre transaction. Utilisez le point de sauvegarde pour enregistrer ce segment d'insertion en tant qu'insertion.

SAVEPOINT Insertion;

Maintenant, nous allons effectuer l'opération UPDATE sur les tables Employee, et nous mettrons à jour le salaire de l'employé de 1,2 pour l'identifiant de l'employé 2003.

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

Nous allons recouper l'opération de mise à jour en exécutant la requête SELECT sur la table Employés :

SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
2003 RUCHIKA JAIN 60000 Bombay TEST 4

Les résultats de la requête ci-dessus montrent que l'enregistrement de l'identifiant de l'employé 2003 a été mis à jour avec succès.

Considérez la requête de mise à jour comme un segment de notre transaction. Nous enregistrerons la partie opération de mise à jour à l'aide d'un SAVEPOINT nommé Updation.

SAVEPOINT Updation;

Maintenant, nous allons effectuer une opération de suppression sur la table Employés. Nous effectuerons une opération de suppression sur la table des employés où le salaire de l'employé est supérieur à 60 000.

DELETE FROM EMPLOYEES WHERE SALARY > 60000;

Nous allons contre-vérifier l'opération de suppression en exécutant la requête SELECT sur la table Employés :

SELECT * FROM EMPLOYEES;

Résultat de la requête ci-dessus :

ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2003 RUCHIKA JAIN 60000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4002 ASHWINI BAGHAT 54500 NOÏDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE TEST 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3

La requête ci-dessus montre que la suppression des enregistrements d'employés a réussi.

Considérez les requêtes de suppression comme un segment de notre transaction. Nous enregistrerons la partie opération de mise à jour à l'aide d'un SAVEPOINT nommé Deletion.

SAVEPOINT Deletion;

Soudain, l'utilisateur s'est rendu compte que la requête que nous voulions effectuer sur l'opération de suppression n'était pas censée être cette requête. Dans une telle situation, les utilisateurs reviendront à l'intégralité de la transaction vers le SAVEPOINT ; l'utilisateur peut revenir à n'importe quel SAVEPOINT qu'il souhaite restaurer, comme l'insertion, la mise à jour SAVEPOINT.

ROLLBACK TO Insertion;

Si l'utilisateur ne souhaite pas supprimer les enregistrements. Par conséquent, l'utilisateur sera restauré au point de sauvegarde d'insertion.

Pour vérifier par recoupement que nous avons la même table d'employés que nous avions avant d'effectuer les opérations de mise à jour et de suppression. Pour récupérer les détails des employés, effectuez l'opération SELECT sur la table des employés.

SELECT * FROM EMPLOYEES;
ID EMPLOYEE FIRST_NAME LAST_NAME SALAIRE VILLE DÉPARTEMENT MANAGERID
1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
1002 VAIBHAV SHARMA 60000 NOÏDA ORACLE 1
1003 NIKHIL VANI 50000 JAIPUR FMW 2
2001 PRACHI SHARMA 55500 CHANDIGAR ORACLE 1
2002 BHAVESH JAIN 65500 PUNE FMW 2
2003 RUCHIKA JAIN 50000 Bombay TEST 4
3001 PRANOTI SHENDE 55500 PUNE JAVA 3
3002 ANUJA WANRE 50500 JAIPUR FMW 2
3003 DEEPAM JAUHARI 58500 Bombay JAVA 3
4001 RAJESH GOUD 60500 Bombay TEST 4
4002 ASHWINI BAGHAT 54500 NOÏDA JAVA 3
4003 PURVA DHANDEKAR 57000 PUNE TEST 4
5001 ASHWIN PATEL 54500 JAIPUR JAVA 3