sql >> データベース >  >> RDS >> Database

SQLのTCLコマンド

    構造化照会言語では、TCLはトランザクション制御言語の略語です。データベース内の単一の作業単位は、コマンドの連続実行がトランザクションと呼ばれる後に形成されます。

    構造化照会言語にはいくつかのコマンドがあり、トランザクション制御言語コマンドはSQLコマンドの1つです。 TCLコマンドはデータベース内のトランザクションを処理します

    構造化照会言語では、コミット、ロールバック、およびセーブポイントは、SQLで広く使用されているトランザクション制御言語コマンドです。

    次に、いくつかの例を使用して、トランザクション制御言語コマンドが構造化照会言語でどのように機能するかを理解して学習しましょう。トランザクション制御言語のコマンドは次のとおりです。

    1. COMMITコマンド
    2. ROLLBACKコマンド
    3. SAVEPOINTコマンド

    COMMITコマンド

    SQLのCommitコマンドは、永続的に変更されるすべてのトランザクションをディスクに保存するために使用されます。 INSERTコマンド、UPDATEコマンド、DELETEコマンドなどのデータ定義言語コマンド(DDL)で操作を実行する場合は常に、これらのコマンドによって行われた変更は永続的ですが、現在のセッションを閉じる前、またはセッションが終了するまでです。セッションがシャットダウンされる前に、データ定義言語を使用して実行した操作を簡単に元に戻すことができます。 Commitコマンドは、セッションを終了せずに変更をストレージに永続的に保存するために使用されます。

    構文:

    COMMIT;

    システムに既存のデータベースがある場合は、その既存のデータベースを使用するか、新しいデータベースを作成します。既存のデータベース会社を使用します。

    USE Company

    特定のデータを持つ既存の従業員のテーブルについて考えてみます。

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4

    SQLでは、STARTTRANSACTIONクエリを使用してトランザクションを開始します。

    START TRANSACTION;           

    次に、既存のEmployeesテーブルに2つのレコードを挿入します。複数のレコードを挿入するには、次のステートメントを使用します。

    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;

    上記のクエリの出力:

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4
    4002 ASHWINI バガット 54500 ジャイプール JAVA 3
    4003 PURVA DHANDEKAR 57000 PUNE テスト 4

    出力には、すべてのレコードが正常に挿入されたことが示されます。

    INSERT操作をEmployeesテーブルに保存するために、COMMITコマンドを実行します。

    COMMIT;

    SQLでは、デフォルトで自動コミットがオンになっています。 SQLで自動コミットをオフにするには、自動コミット値を0に設定します。

    従業員ID4002を更新し、都市を「ノイダ」に設定します。以下のクエリを使用して、従業員レコードを更新します。

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

    次に、SELECTクエリを使用して、テーブル内のレコードが正常に更新されたかどうかを確認します。

    SELECT * FROM EMPLOYEES;

    上記のクエリの出力:

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4
    4002 ASHWINI バガット 54500 NOIDA JAVA 3
    4003 PURVA DHANDEKAR 57000 PUNE テスト 4

    出力からわかるように、従業員ID4002の都市が変更されました。

    従業員のテーブルに変更を保存するために、COMMITコマンドを記述します。

    COMMIT;

    ここで、Employeesテーブルから従業員ID4003を削除します。以下のクエリを使用して、従業員レコードを削除します。

    DELETE FROM EMPLOYEES WHERE EMPLOYEEID = 4003;

    次に、SELECTクエリを使用して、テーブル内のレコードが正常に削除されたかどうかを確認します。

    SELECT * FROM EMPLOYEES;

    上記のクエリの出力:

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4
    4002 ASHWINI バガット 54500 NOIDA JAVA 3

    出力は、従業員ID4003の詳細を削除したことを確認します。

    従業員のテーブルに変更を保存するために、COMMITコマンドを記述します。

    COMMIT;

    SAVEPOINTコマンド

    実行されるデータベース操作は、2つの部分に分けることができます。たとえば、実行したすべてのdeleteステートメントをトランザクションの1つのセグメントと見なし、updateステートメントをトランザクションの1つのセグメントと見なします。同じトランザクションの挿入部分に挿入クエリを保存し、削除部分に削除クエリを保存するには、SQLでSAVEPOINTコマンドを使用します。削除に関連するすべてのクエリを、deleteという名前のセーブポイントで保存するとします。削除に関連するすべての操作を1つのセーブポイントに保存するには、削除クエリを実行した後、SAVEPOINTコマンドを実行してからセーブポイント名を実行する必要があります。

    構文:

    SAVEPOINT savepoint name; 

    ROLLBACKコマンド

    トランザクションの実行中に、トランザクションのさまざまなセグメントを保存するためのセーブポイントを作成しました。ユーザーの要件が変更されると、ユーザーは別のセーブポイントへのトランザクションを元に戻すことができます。シナリオを考えてみましょう。トランザクションを開始した後、テーブルを作成し、テーブルにレコードを挿入しました。テーブルにレコードを追加した後、savepointという名前のINSを作成しました。挿入後、削除操作を実行しましたが、後で間違ったレコードを誤って削除したことを思い出しました。トランザクションを元に戻して、セーブポイントINSに到達します。トランザクションを元に戻すには、ROLLBACKコマンドを使用します。

    実行した操作をロールバックすることも、セーブポイントトランザクション全体をロールバックすることもできます。

    操作をロールバックする構文:

    ROLLBACK;

    トランザクションをロールバックする構文:

    ROLLBACK TO savepoint;

    SAVEPOINTコマンドとROLLBACKコマンドの例:

    システムに既存のデータベースがある場合は、その既存のデータベースを使用するか、新しいデータベースを作成します。 Companyという名前の既存のデータベースを選択します。

    USE Company

    次のレコードを持つ既存の従業員のテーブルについて考えてみます。

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4
    4002 ASHWINI バガット 54500 NOIDA JAVA 3

    SQLでは、STARTTRANSACTIONクエリを使用してトランザクションを開始します。

    START TRANSACTION;           

    次に、既存のEmployeesテーブルに2つのレコードを挿入します。複数のレコードを挿入するには、以下のステートメントを使用します:

    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;

    上記のクエリの出力:

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4
    4002 ASHWINI バガット 54500 NOIDA JAVA 3
    4003 PURVA DHANDEKAR 57000 PUNE テスト 4
    5001 ASHWIN PATEL 54500 ジャイプール JAVA 3

    ご存知のとおり、SQLのSAVEPOINTコマンドは、同じトランザクションのさまざまな部分を保存するために使用されます。挿入はトランザクションの1つのセグメントであると想定します。セーブポイントを使用して、この挿入セグメントを挿入として保存します。

    SAVEPOINT Insertion;

    次に、Employeeテーブルに対してUPDATE操作を実行し、従業員ID2003の従業員の給与を1.2ずつ更新します。

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

    EmployeesテーブルでSELECTクエリを実行して、更新操作をクロスチェックします。

    SELECT * FROM EMPLOYEES WHERE EMPLOYEEID = 2003;
    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    2003 ルチカ JAIN 60000 ムンバイ テスト 4

    上記のクエリ結果は、従業員ID2003レコードが正常に更新されたことを示しています。

    更新クエリをトランザクションの1つのセグメントと見なします。更新という名前のSAVEPOINTを使用して、更新操作部分を保存します。

    SAVEPOINT Updation;

    次に、Employeesテーブルに対して削除操作を実行します。従業員の給与が60000を超える従業員テーブルに対して削除操作を実行します。

    DELETE FROM EMPLOYEES WHERE SALARY > 60000;

    EmployeesテーブルでSELECTクエリを実行して、削除操作をクロスチェックします。

    SELECT * FROM EMPLOYEES;

    上記のクエリの出力:

    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2003 ルチカ JAIN 60000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4002 ASHWINI バガット 54500 NOIDA JAVA 3
    4003 PURVA DHANDEKAR 57000 PUNE テスト 4
    5001 ASHWIN PATEL 54500 ジャイプール JAVA 3

    上記のクエリは、従業員レコードの削除が成功したことを示しています。

    削除クエリをトランザクションの1つのセグメントと見なします。 Deletionという名前のSAVEPOINTを使用して、更新操作部分を保存します。

    SAVEPOINT Deletion;

    突然、ユーザーは、削除操作で実行したいクエリがそのクエリではないことに気づきました。このような状況では、ユーザーはトランザクション全体をSAVEPOINTにロールバックします。ユーザーは、挿入、更新SAVEPOINTなど、ロールバックしたい任意のSAVEPOINTにロールバックできます。

    ROLLBACK TO Insertion;

    ユーザーがレコードを削除したくない場合。したがって、ユーザーは挿入SAVEPOINTにロールバックされます。

    更新および削除操作を実行する前に持っていたのと同じemployeeテーブルがあることをクロスチェックします。従業員の詳細を取得するには、従業員のテーブルでSELECT操作を実行します。

    SELECT * FROM EMPLOYEES;
    EMPLOYEEID FIRST_NAME LAST_NAME 給与 CITY 部門 MANAGERID
    1001 VAIBHAVI MISHRA 65000 PUNE ORACLE 1
    1002 VAIBHAV シャルマ 60000 NOIDA ORACLE 1
    1003 NIKHIL VANI 50000 ジャイプール FMW 2
    2001 PRACHI シャルマ 55500 チャンディーガル ORACLE 1
    2002 BHAVESH JAIN 65500 PUNE FMW 2
    2003 ルチカ JAIN 50000 ムンバイ テスト 4
    3001 PRANOTI SHENDE 55500 PUNE JAVA 3
    3002 ANUJA WANRE 50500 ジャイプール FMW 2
    3003 DEEPAM ジャウハリ 58500 ムンバイ JAVA 3
    4001 RAJESH GOUD 60500 ムンバイ テスト 4
    4002 ASHWINI バガット 54500 NOIDA JAVA 3
    4003 PURVA DHANDEKAR 57000 PUNE テスト 4
    5001 ASHWIN PATEL 54500 ジャイプール JAVA 3


    1. グループ内の最後の行をクエリで検索-SQLServer

    2. 解決方法認証プラグイン'caching_sha2_password'の問題を読み込めません

    3. MySQLルートパスワードをリセットする方法

    4. MySQLクロスサーバー選択クエリ