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. 插入 1 -> 保存 $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 回答