ホームページ > データベース > mysql チュートリアル > 複数の MySQL テーブルに同時にデータを挿入し、データの整合性を維持するにはどうすればよいですか?

複数の MySQL テーブルに同時にデータを挿入し、データの整合性を維持するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-24 21:15:40
オリジナル
316 人が閲覧しました

How Can I Insert Data into Multiple MySQL Tables Simultaneously and Maintain Data Integrity?

MySQL の複数のテーブルへの挿入: 可能ですか? それともデータベースの正規化の問題ですか?

あなたはジレンマに直面しました: 単一のテーブルを使用して同時に複数のテーブルにデータを挿入する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 または他の言語変数の使用:

  • 最初のレコードを挿入します
  • 言語を使用して LAST_INSERT_ID() を取得します
  • 使用して後続のテーブルに挿入しますPHP/言語変数

トランザクションの一貫性に関する注意

データの一貫性を確保するには、クエリをトランザクションにラップすることが重要です。つまり、すべてのクエリが成功するか、何も成功しないかのどちらかです。クエリ間で実行が中断された場合、一部のテーブルにはレコードが挿入されているが、他のテーブルには挿入されていない可能性があります。トランザクションは、このようなことが起こらないことを保証します。

以上が複数の MySQL テーブルに同時にデータを挿入し、データの整合性を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート