複数のテーブルへのデータの同時挿入
2 つのテーブルへのデータの同時挿入は MySQL で実現できますが、MySQL とは異なるアプローチが必要です。提供された SQL ステートメント。
提供されたクエリは、訪問テーブルと登録テーブルの両方に一度にデータを挿入しようとします。 手術。ただし、INSERT ステートメントは一度に 1 つのテーブルしかターゲットにできないため、これは MySQL では直接サポートされていません。望ましい結果を達成するには、次のオプションがあります:
バッチ処理
2 つの別々の INSERT クエリをバッチとして実行します:
BEGIN; INSERT INTO visits (visit_id, card_id) VALUES (NULL, 12131141); INSERT INTO registration (registration_id, type, timestamp, visit_id) VALUES (NULL, 'in', UNIX_TIMESTAMP(), LAST_INSERT_ID()); COMMIT;
ストアド プロシージャ
作成両方の挿入操作をカプセル化するストアド プロシージャ:
CREATE PROCEDURE insert_into_tables( IN card_id INT, IN type ENUM('in', 'out'), IN timestamp INT ) BEGIN DECLARE visit_id INT; INSERT INTO visits (card_id) VALUES (card_id); SET visit_id = LAST_INSERT_ID(); INSERT INTO registration (registration_id, type, timestamp, visit_id) VALUES (NULL, type, timestamp, visit_id); END;
その後、必要なパラメータを指定してストアド プロシージャを呼び出すことができます:
CALL insert_into_tables(12131141, 'in', UNIX_TIMESTAMP());
Transaction Management
両方の挿入操作が確実にアトミックに実行されるようにするには、これらの操作をトランザクション:
BEGIN TRANSACTION; INSERT INTO visits (visit_id, card_id) VALUES (NULL, 12131141); INSERT INTO registration (registration_id, type, timestamp, visit_id) VALUES (NULL, 'in', UNIX_TIMESTAMP(), LAST_INSERT_ID()); COMMIT;
これらのアプローチを利用すると、MySQL で複数のテーブルに同時にデータを挿入できます。
以上がMySQL で複数のテーブルに同時にデータを挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。