MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでトランザクション内の変更を永続的に記録するには?COMMITコマンドの使い方

MySQLでは、COMMITコマンドを使用することで、現在のトランザクション内で行われた変更をデータベースに永続的に記録できます。

たとえば、いくつかのDML文(INSERT、UPDATE、DELETEなど)を実行してデータを更新した場合、その時点では変更はまだ確定していません。そこでCOMMITコマンドを実行すると、これらの更新内容が確定され、データベースに恒久的に保存されます。

COMMITの使用例

以下は、トランザクションを開始し、2件のレコードを挿入した後にCOMMITで変更を確定する例です。

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)

この例では、COMMITステートメントによってトランザクションが明示的に終了し、それまでに行われた変更がすべて保存されます。つまり、データベースに永続的に記録されることになります。

実際にテーブルを確認すると、挿入されたデータが反映されていることが分かります。

mysql> SELECT * FROM Marks;
+------+---------+---------+-------+
| Id   | Name    | Subject | Marks |
+------+---------+---------+-------+
| 1    | Aarav   | Maths   | 50    |
| 2    | Harshit | Maths   | 55    |
+------+---------+---------+-------+
2 rows in set (0.00 sec)

補足:COMMIT前であれば変更は取り消せる

COMMITを実行する前であれば、ROLLBACKコマンドを使ってトランザクション開始以降の変更をすべて取り消すことができます。この仕組みにより、誤操作によるデータの破損を防ぎながら、安全にデータを更新できます。

また、MySQLはデフォルトで自動コミット(autocommit)モードが有効になっているため、明示的にトランザクションを開始しない場合、各SQL文は実行のたびに自動的にコミットされます。複数の処理をひとまとまりとして扱いたい場合は、START TRANSACTIONでトランザクションを開始し、最後にCOMMITで確定するという流れを覚えておきましょう。

  1. MySQLデータベースに現在の日付を挿入する方法

    MySQLデータベースに現在の日付を挿入する方法MySQLで現在の日付をデータベースに挿入するには、NOW()関数を使用します。基本構文は以下のとおりです。INSERT INTO テーブル名(日付カラム名) VALUES(NOW());ただし、対象カラムのデータ型がDATE型の場合、NOW()関数は時刻情報を持っているため、日付部分のみが挿入され、MySQLから警告(warning)が表示されます。この警告を避けたい場合は、CURDATE()関数を使用するのが効果的です。テーブルの作成まずは動作確認用のテーブルを作成します。mysql> create table insertcurren

  2. MySQLで現在のデータベース名を指定してデータベースを削除する方法

    MySQLでは、DROP DATABASE文を使うことでデータベースを削除できます。ここでは、現在接続中のデータベース名を動的に取得し、そのデータベース自身を削除する手順を解説します。1. 現在のデータベース名を取得する現在選択されているデータベース名を確認するには、SELECT DATABASE()を使用します。select database();2. 削除クエリを動的に組み立てる構文現在のデータベース名をユーザー変数に格納し、CONCAT()で削除用のSQL文を組み立て、プリペアドステートメントとして実行します。基本的な構文は以下のとおりです。set @anyVariableName =