使用单个查询插入多行时,获取所有插入的ID

Gar*_*igo 11 php mysql database auto-increment

我已经看过其他答案了,我仍然认为我的问题是相关的,值得一个单独的条目.

我有一个名为settings的表(存储用户设置),我必须为每个用户插入多个设置.最初,我为每个设置执行了一个单独的insert语句,但是觉得这不是一个特别好的方法,我想通过相同的insert语句插入多行.我唯一的问题是我想要每个新插入行的auto_incremented ID.

我已经阅读了答案,说这不可能/可扩展等,但我觉得我已经找到了解决方案.我想要反馈我的方式是否正确,因此这个问题.

我所做的很简单.插入多行后,我调用last_insert_id()来获取同时插入的行的第一行的ID.我已经计算了插入的行数,所以我只需要创建一个新数组并使用从last_insert_id()开始并以last_insert_id()+ n-1结尾的ID填充它(其中n是插入的行数).

我觉得这会有效,原因如下:

1.)MYSQL文档声明last_insert_id()依赖于连接,如果另一个客户端/连接插入新记录,那么这不会影响其他客户端的last_insert_id().

2.)我觉得由于插入是由单个SQL语句完成的,因此应将整个插入视为单个事务.如果这是真的,那么应该应用ACID规则并且auto_incremented值应该是顺序的.我不确定这个.

这些是我认为逻辑应该起作用的原因.所以我的问题是,上述逻辑是否适用于所有条件?我可以依靠它在所有情况下都能正常工作吗?我知道它目前对我有用.

bat*_*to3 1

如果你喜欢赌博 - 那么就这样做:)

\n\n

为了 99% 确定,您必须锁定表以进行写入。您不确定(将来)两个事务\xc2\xa0 将无法交织在一起。

\n\n

为了百分百确定您已阅读这些值。(或者分析源MySQL)\n最好的解决方案是将日期添加到tablei编辑设置中并读取最新的。如果您不想更改结构,可以使用触发器http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

\n\n

好的解决方案将刷新您的所有设置或仅刷新对:键 - 设置名称

\n