前提・実現したいこと
MySQLでトランザクション内で複数SQLを実行してコミットすると最後のSQLしか有効になりません。
原因等わかる方いらっしゃいますか?
発生している問題
使用しているMySQLのバージョンは以下のとおりです。
# mysql --version mysql Ver 15.1 Distrib 10.4.6-MariaDB, for Linux (x86_64) using readline 5.1
データベースには以下の2テーブルがあります。
test1 +-------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | +-------+---------------------+------+-----+---------+----------------+ test2 +----------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+---------------------+------+-----+---------+----------------+ | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment | | test1_id | bigint(20) unsigned | NO | | NULL | | | name | varchar(255) | YES | | NULL | | +----------+---------------------+------+-----+---------+----------------+
このテーブルに以下のSQLを実行しました。
(テーブルには何もデータは入っていません)
begin; insert into test1 (id, name) values (null, 'test'); insert into test2 (id, test1_id, name) values (null, 1, 'test'); commit;
SQL実行後のテーブルのデータは以下のとおりです。
select * from test1; Empty set (0.001 sec) select * from test2; +----+----------+------+ | id | test1_id | name | +----+----------+------+ | 1 | 1 | test | +----+----------+------+ 1 row in set (0.001 sec)
2つ目のSQLしか実行されていないようです。
トランザクションをかけずに個別にinsertを実行すると問題なく登録できています。
コミットではなく、ロールバックをするとtest1、test2どちらにもデータが入っていない状態となります。(正しい挙動)
MySQLの設定等原因わかる方いらっしゃいますでしょうか?
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/25 04:21
2019/10/25 04:24
2019/10/25 04:38
2019/10/25 04:46
2019/10/25 04:51
2019/10/25 05:00
2019/10/25 05:06 編集
2019/10/25 05:15
2019/10/25 05:34
2019/10/25 06:29
2019/10/25 06:33