假设我有一个包含auto_increment列的表,并且多个插入同时进行:
INSERT INTO service_request.service_request_data(emp_id,sales_force_id,type_of_request,rfp_rfi,closure_deadline,mode_of_submission,submission_date,clarification_date,extention_date,region,item_status,participants_status,reviewer_status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
而且,我需要为插入的数据自动增加id。我怎么能得到它。可能是在插入之后很多插件都会发生。
请帮助我找出这个。
答案 0 :(得分:0)
您可以使用MySQL的函数LAST_INSERT_ID()
。 Here是文档。
该功能每个会话(换句话说,每个连接)。如果来自不同会话(连接)的多个INSERT
同时进行,则每个会话(连接)将返回其最后插入的值,与其他会话(连接)无关。
但请仔细阅读文档,因为该功能部分令人惊讶。例如,如果相同的会话同时插入多个行 ,则LAST_INSERT_ID()
将返回的ID < / em>已插入的行。因此,您最终必须将其与ROW_COUNT()
组合才能实际获取插入的最后一行生成的ID。
此外,您必须考虑LAST_INSERT_ID()
在事务,触发器和事件中的工作方式,以及在事务回滚或提交时它的作用。
ROW_COUNT()
也可能是一个具有惊人行为的复杂野兽。例如,查看在INSERT ... ON DUPLICATE KEY UPDATE
语句之后使用它时的作用。全部都在documentation,您可能需要多次阅读以完全理解它(我必须)。