facebook twitter hatena line email

Mysql/トランザクション

提供: 初心者エンジニアの簡易メモ
2015年5月20日 (水) 03:18時点における127.0.0.1 (トーク)による版 (ページの作成:「==トランザクションサンプル== mysql> CREATE TABLE `areas` ( `ken` varchar(20) DEFAULT NULL, `si` varchar(20) DEFAULT NULL, KEY `idx_area` (`ken`,`si`...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

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

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;