MySQL の複数のテーブルへの挿入: データベースの正規化
MySQL での複数のテーブルへのデータの同時挿入は、直接サポートされていません。ただし、この機能を実現する別のアプローチもあります。
トランザクションの使用
テーブル間のデータの一貫性を確保するには、トランザクションを使用することをお勧めします。トランザクションは一連のクエリを 1 つの単位としてカプセル化し、すべてのクエリが同時に成功または失敗することを保証します。
トランザクションを使用した例を次に示します。
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 を挿入するには、LAST_INSERT_ID() 関数を使用できます。 。ただし、後続の挿入ステートメントが独自の自動インクリメント列を持つテーブルに挿入される場合、LAST_INSERT_ID() 値はそのテーブルの値に更新されます。
元の LAST_INSERT_ID() 値を保存するには、トランザクション内のカスタム変数に含めます。
MySQL の使用変数:
INSERT ... SELECT LAST_INSERT_ID() INTO @mysql_variable_here; INSERT INTO table2 (@mysql_variable_here, ...);
言語変数の使用:
// PHP example $mysqli->query("INSERT INTO table1 ..."); $userid = $mysqli->insert_id; $mysqli->query("INSERT INTO table2 ($userid, ...)");
注意
に挿入するときはデータベースの一貫性を考慮することが重要です複数のテーブル。中断された場合、トランザクションはすべてのクエリが完全に実行されるか、まったく実行されないかを確認します。トランザクションがないと、部分的な挿入により不整合が生じる可能性があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3