MySQL(MariaDB)のトランザクション処理方法

MySQL(MariaDB)のトランザクション処理方法

ここでは、MySQL(MariaDB)のトランザクション処理方法を紹介します。
MySQL(MariaDB)は、通常時は、オートコミットになってます。つまり、INSERT文を流した時点ですぐにコミットされてしまいます。

トランザクション処理が行えるテーブルの確認

トランザクション処理を行うためには、テーブルが、「InnoDB」になっている必要があります。「MyIsam」だとトランザクション処理が行えません。
SHOW CREATE TABLE テーブル名;

ENGINE=InnoDBと表示されていれば、トランザクション処理が行えます。

InnoDBテーブルの作成方法

CREATE TABLE 時に「ENGINE=InnoDB」を最後に追記します。最近のバージョンのMySQL(MariaDB)は、デフォルトでInnoDBになっているので、通常は付けなくても大丈夫です。

CREATE TABLE `animals` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

MyIsamからInnoDBへの変更方法

ALTER TABLE テーブル名 ENGINE=InnoDB;

トランザクション処理の方法

BEGINでオートコミットを解除します。

ROLLBACKで元に戻します。

-- トランザクション開始
BEGIN;

-- クエリ
INSERT INTO animals (name) VALUES ('dog');
INSERT INTO animals (name) VALUES ('cat');

SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
+----+---------+

-- ロールバック
ROLLBACK;

SELECT * FROM animals;
Empty set (0.00 sec)

COMMITで反映する。

-- トランザクション開始
BEGIN;

-- クエリ
INSERT INTO animals (name) VALUES ('dog');
INSERT INTO animals (name) VALUES ('cat');

SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
+----+---------+

-- コミット
COMMIT;

SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  1 | dog     |
|  2 | cat     |
+----+---------+