0

データベースに挿入する一連のレコードがありますが、データベースの構造には特別なアプローチが必要です。

BEGIN;
table contact -> firstname,lastname
table company -> name
table contact_company_vs -> contact_id,company_id (THESE TWO ARE LAST_INSERT_IDs FROM first two inserts)
COMMIT;

どうやってするか?いくつかの挿入を次々に実行して、変数を格納するphp機能に制限する必要がありますか?

4

1 に答える 1

1

実際には、phpまたはsqlでこれを行うことができます

PHP

  1. mysqli/pdo および innodb テーブルを使用する
  2. 自動コミットをオフに設定する
  3. insert 1 -> save $id (mysqli_insert_id 経由で取得でき、トランザクション内で適切に動作します)
  4. 2 を挿入 -> $id2 を保存
  5. 3 を挿入 -> $id と $id2 があります
  6. すべての変更をコミットする
  7. ロジック中にエラーが発生した場合 - それらをロールバックします

SQL

私はストアド プロシージャを使用することを好みます。

declare id1 bigint default 0;
declare id2 bigint default 0;
insert1 ... ;
SELECT LAST_INSERT_ID() into id1;
insert2 ... ;
SELECT LAST_INSERT_ID() into id2;
insert into contact_company_vs values(id1, id2);
select id1, id2;

そのようなストアド プロシージャは、生成された両方の ID をロジックに返します。

于 2013-11-01T23:13:08.177 に答える