質問: "CREATE TABLE wp_sub1s ( `mains_ID` BIGINT(20) UNSIGNED NOT NULL ,`title` VARCHAR(50) NOT NULL ,PRIMARY KEY (`mains_ID`) ,FOREIGN KEY (`mains_ID`) REFERENCES wp_mains(`ID`) );"; add_option($table_name."_version", '1.0'); dbDelta($sql); } ```
回答: 1番目の質問だけ回答します。 テーブルロックの方法は「トランザクション→テーブルロック」が正解です。 なぜなら`START TRANSACTION`を実施すると既存のロックは全て解消されてしまうからです。つまり、テーブルロックを先に行っても意味なし。 質問者がリンクを張ったMySQLのドキュメントにしっかり明記されていますのでもう一度読んでみてください。 根本原因は追記依頼にも書きましたが、きちんとロールバック処理に進んでいればautocommitが怪しく、コミット処理側に進んでいればsub1へinsertした際の戻り値が怪しいです。 ### 追記 コメントより、以下の方法でうまく動作したそうです。autocommitの値を変更する方法。 ``` $wpdb->query('SET autocommit=0'); // これで0を指定 // $wpdb->query('START TRANSACTION'); // これは不要 $wpdb->query('LOCK TABLES wp_mains WRITE, wp_sub1s WRITE'); ```