あなたはジレンマに直面しました: 単一のテーブルを使用して同時に複数のテーブルにデータを挿入するMySQLクエリ。しかし、これは不可能であることがわかりました。この課題を克服するために、複数のクエリの使用を検討しました:
INSERT INTO users (username, password) VALUES('test', 'test') INSERT INTO profiles (userid, bio, homepage) VALUES('[id of the user here?]','Hello world!', 'http://www.stackoverflow.com')
しかし、今度は新しい問題に直面します。それは、ユーザー テーブルの自動インクリメント ID を、ユーザー テーブルの「手動」ユーザー ID に割り当てる方法です。プロファイル テーブル?
答え: トランザクションを利用する
挿入はできませんが単一の MySQL コマンドで複数のテーブルに分割すると、トランザクションを活用できます。
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;
LAST_INSERT_ID() について
LAST_INSERT_ID() 関数を使用すると、自動インクリメント値を再利用できます。 2 番目のステートメントでは、LAST_INSERT_ID() は、最初のステートメントで挿入された自動インクリメント列の値を自動的に取得します。
代替メソッド
1。 MySQL 変数の使用:
INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...); INSERT INTO table3 (@mysql_variable_here, ...);
2. PHP または他の言語変数の使用:
トランザクションの一貫性に関する注意
データの一貫性を確保するには、クエリをトランザクションにラップすることが重要です。つまり、すべてのクエリが成功するか、何も成功しないかのどちらかです。クエリ間で実行が中断された場合、一部のテーブルにはレコードが挿入されているが、他のテーブルには挿入されていない可能性があります。トランザクションは、このようなことが起こらないことを保証します。
以上が複数の MySQL テーブルに同時にデータを挿入し、データの整合性を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。