facebook twitter hatena line email

Mysql/トランザクション

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

トランザクションサンプル

mysql> CREATE TABLE `areas` (
  `ken` varchar(20) DEFAULT NULL,
  `si` varchar(20) DEFAULT NULL,
  KEY `idx_area` (`ken`,`si`)
) ENGINE=InnoDB 

--トランザクション開始
mysql> START TRANSACTION;
mysql> insert into areas values('yamaguti', 'iwakuni');
mysql> select * from areas;
+----------+---------+
| ken      | si      |
+----------+---------+
| yamaguti | iwakuni |
+----------+---------+
--処理を戻す
mysql> ROLLBACK;
mysql> select * from areas;
+-------+---------+
| ken   | si      |
+-------+---------+

--トランザクション開始
mysql> START TRANSACTION;
mysql> insert into areas values('yamaguti', 'iwakuni');
--確定
mysql> COMMIT;
mysql> select * from areas;
+----------+---------+
| ken      | si      |
+----------+---------+
| yamaguti | iwakuni |
+----------+---------+

行ロック(悲観的

mysql> START TRANSACTION;
mysql> SELECT * FROM areas WHERE ken = 'yamaguti' FOR UPDATE; -- 更新トランザクションが存在する場合は待機
mysql> UPDATE areas set ken = 'test' WHERE ken = 'yamaguti';
mysql> COMMIT;