我有两张桌子' X'和' Y'。 X的主键由MySQL(auto_increment)自动生成。 X的主键是Y中的外键。我使用相同的表单获取两个表的值,并使用相同的PHP文件将值插入表中。首先,我将值插入表X并使用$id = mysqli_insert_id($db);
获取自动生成的ID(主键),并使用$ id将值插入表Y.
我的问题是如果有很多并发用户,是否有可能从表X中获取错误的ID 。是否有更好的选择从表X中获取正确的ID(自动生成)。
答案 0 :(得分:0)
根据MySql的last_insert_id()
函数的文档,最后一个插入ID是基于每个连接存储的,因此您可以完全安全地假设表X中的ID是在之前的INSERT语句中插入的那个。
在https://dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html上引用他们的文档:
对于LAST_INSERT_ID(),最近生成的ID在每个连接的基础上维护在服务器中。它不会被其他客户更改。如果使用非可疑值更新另一个AUTO_INCREMENT列(即,非NULL且不为0的值),则甚至不会更改它。同时从多个客户端使用LAST_INSERT_ID()和AUTO_INCREMENT列是完全有效的。每个客户端将收到客户端执行的最后一个语句的最后插入的ID。