我现在需要扩展到多个 Web 服务器和一个 db 服务器,而不是托管 mysql 和站点在同一个盒子上。
我在 php 中使用 'mysqli_insert_id' 为另一个后续操作返回一个键值。随着我向外扩展和更多用户访问该站点,这仍然是获取最后一个插入 ID 的可靠方法吗?如果由于某种原因,两个请求几乎同时命中,那么使用 mysqli_insert_id 是否有可能返回错误的插入 ID,因为插入和选择调用似乎都会立即发生?
来自MySQL 文档:
对于 LAST_INSERT_ID(),最近生成的 ID 在每个连接的基础上维护在服务器中。它不会被其他客户端更改。如果您使用非魔术值(即非 NULL 且非 0 的值)更新另一个 AUTO_INCREMENT 列,它甚至不会更改。从多个客户端同时使用 LAST_INSERT_ID() 和 AUTO_INCREMENT 列是完全有效的。每个客户端都将收到客户端执行的最后一条语句的最后插入 ID。
所以是的,mysqli_insert_id
将仍然是获取最后一个插入 ID 的可靠方法。