2013-11-01 57 views
0

我有一系列的記錄插入到數據庫,但數據庫的結構,需要一種特殊的辦法LAST_INSERT_ID:多次插入與事務

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

其實你可以做到這一點無論是用PHP或SQL

PHP

  1. 使用的mysqli/PDO和InnoDB表
  2. 關閉自動提交設置
  3. 片1 - >保存$ id(你可以通過mysqli_insert_id得到它,它可以在事務內正常工作)
  4. insert 2 - > save $ 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返回給你r邏輯