在事务中使用last_insert_id进行多次插入

时间:2013-11-01 23:04:32

标签: php mysql insert transactions

我有一系列要插入数据库的记录,但数据库的结构需要一种特殊的方法:

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功能吗?

1 个答案:

答案 0 :(得分:1)

实际上你可以用php或者用sql

来做到这一点

<强> PHP

  1. 使用mysqli / pdo和innodb表
  2. 将自动提交设置为关闭
  3. 插入1 - &gt;保存$ id(你可以通过mysqli_insert_id获取它,它将在事务中正常工作)
  4. 插入2 - &gt;保存$ id2
  5. 插入3 - &gt;你有$ id和$ id2
  6. 提交所有更改
  7. 如果在逻辑期间出现任何错误 - 回滚它们
  8. <强> 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返回到逻辑