環境
mysql mariadb
JetBrains系IDE
RiderとPHPStormを常用していますが、他も同じ仕様だと思われる
問題
IDEAとかRiderとかでDBをGUIで操作できる「Database Tools and SQL」という超便利機能があります。
さっくり試したいときに多用しているんですが、autocommitを明示的に書いても効かない。
SET autocommit = 0;
-- テーブル作成
CREATE TABLE IF NOT EXISTS test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- データ挿入
INSERT INTO test_table (name) VALUES
('Test Name 1'),
('Test Name 2'),
('Test Name 3');
+--+-----------+-------------------+
|id|name |created_at |
+--+-----------+-------------------+
|1 |Test Name 1|2024-07-01 02:47:40|
|2 |Test Name 2|2024-07-01 02:47:40|
|3 |Test Name 3|2024-07-01 02:47:40|
+--+-----------+-------------------+
対策
理由はわからないのですが、ここで"SET autocommit = 0;"を記述しても効かないみたいです。(たぶん↓の設定で上書きされている気がする)
勝手にcommitされたくない場合は以下の「Transaction control」を「Manual」にする必要がありました。
この設定をした上でIDEを再起動するとコンソール画面に「commit」と「rollback」のボタンが追加されます。
この設定を適用するとautocommitがオフになるようで、「SET autocommit = 0」を書かなくても暗黙的にcommitされることはありません。
まとめ
結局「SET autocommit = 0」を書いても適用されない理由はわからなかった。
1行ずつ違うセッションで実行されているのかと思ったが、だとするとトランザクションがそもそも意味をなさなくなるので違う。
関係ありそうな公式フォーラム