MySQLトランザクションをどのように実装できますか?
トランザクションでは、ステートメントは1つの単位として実行されます。トランザクション内のいずれかの操作が失敗した場合、トランザクション全体が失敗するため、ロールバックする必要があります。それ以外の場合、ステートメントによって行われた変更はすべてデータベースに保存されます。トランザクションを実装するために、MySQLは次のステートメントを提供します-
名前が示すように、トランザクションはこのステートメントで始まります。基本的に、トランザクションが終了するまで、後続のステートメントは単一のワークユニットとして扱われる必要があることをMySQLに通知します。
COMMITステートメントは、データベースへの変更をコミットします。つまり、トランザクションが正常に完了したら、COMMITコマンドを発行して、関連するすべてのテーブルへの変更を有効にする必要があります。
ROLLBACKコマンドは、ステートメントによって行われた変更をすべて元に戻し、データベースを以前の状態、つまりトランザクションが開始されたときの状態に戻します。
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Aarav','Maths',50); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Marks Values(2, 'Harshit','Maths',55); Query OK, 1 row affected (0.00 sec) mysql> COMMIT; Query OK, 0 rows affected (0.06 sec)
この例では、トランザクションはSTARTTRANSACTIONステートメントによって開始されます。次に、2つのINSERTステートメントが実行され、その後にCOMMITステートメントが続きます。 COMMITステートメントは、値がテーブルに挿入されたことを示す次の結果セットから観察できるデータベースへの変更を保存します-
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 2 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Aarav','History',40); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Marks Values(1, 'Harshit','History',48); Query OK, 1 row affected (0.00 sec) mysql> ROLLBACK; Query OK, 0 rows affected (0.04 sec)
この例では、トランザクションはSTARTTRANSACTIONステートメントによって開始されます。次に、2つのINSERTステートメントが実行され、その後にROLLBACKステートメントが続きます。 ROLLBACKステートメントは、データベースに加えられた変更を元に戻します。これは、新しい値がテーブルに挿入されていないことを示す次の結果セットから確認できます-
mysql> SELECT * FROM Marks; +------+---------+---------+-------+ | Id | Name | Subject | Marks | +------+---------+---------+-------+ | 1 | Aarav | Maths | 50 | | 1 | Harshit | Maths | 55 | +------+---------+---------+-------+ 2 rows in set (0.00 sec)
-
MySQLでNULLに対して0を返すにはどうすればよいですか?
IFNULL()メソッドを使用して、MySQLのNULLに対して0を返すことができます。 IFNULL()の構文は次のとおりです。 IFNULL(YOUREXPRESSION,0); 例を見てみましょう。まず、テーブルを作成します。 mysql> create table NullDemoWithZero -> ( -> id varchar(200) -> ); Query OK, 0 rows affected (0.65 sec) テーブルを作成したら、INSERTコマンドを使用してテーブルにいくつかのレコードを挿入しましょう。クエリ
-
MySQLでネストされたトランザクションをどのように使用できますか?
SAVEPOINTを使用すると、MySQLでネストされたトランザクションを操作できます。 まず、テーブルを作成します。その後、トランザクションを開始します。 次に、上記で作成したテーブルにレコードを挿入します。 SAVEPOINTステートメントを使用して、名前付きトランザクションのセーブポイントを識別子の名前で設定します。 クエリの形式で表示されるすべての手順は次のとおりです- テーブルを作成する mysql> create table NestedTransactionDemo -> ( -> Name varchar(200) -> );