ホームページ >データベース >mysql チュートリアル >単一のトランザクションで複数の MySQL テーブルにデータを効率的に挿入するにはどうすればよいですか?
複数のテーブルへの MySQL の挿入
単一の MySQL クエリで複数のテーブルにデータを挿入しようとすると、予期しない結果が生じる可能性があります。複数のクエリで問題が解決するように見えるかもしれませんが、ユーザー テーブルの自動インクリメント ID をプロファイル テーブルの手動ユーザー ID に関連付けることには課題があります。
トランザクションと LAST_INSERT_ID() の使用
単一トランザクションで複数のテーブルに挿入するには、次を使用しますアプローチ:
BEGIN; INSERT INTO users (username, password) VALUES('test', 'test'); INSERT INTO profiles (userid, bio, homepage) VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com'); COMMIT;
自動インクリメント ID を変数に保存する
または、自動インクリメント ID を変数に保存すると、後続のクエリでそれを参照できるようになります。これは、
MySQL 変数:
INSERT INTO ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...);
PHP を使用して実現できます。変数:
INSERT ... $result = mysql_query("SELECT LAST_INSERT_ID()"); $id = mysql_result($result, 0); INSERT INTO table2 ($id, ...);
トランザクションの考慮事項
選択したアプローチに関係なく、中断された実行の潜在的な影響を考慮してください。トランザクションが存在しない場合、データベース内で不整合が発生する可能性があります。これを防ぐには、上で示したように、挿入ステートメントをトランザクション内でラップします。
以上が単一のトランザクションで複数の MySQL テーブルにデータを効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。