database = mysql language = php
我正在编写程序来像这样工作
PC1 = computer1
步骤
1.PC1从自动增量插入数据,新ID。
2.PC1选择最后一个ID
一切正常但是......
许多计算机在同一mili-sec使用您的代码时出现的问题。 例如
2.PC2插入数据,自动递增新ID
3.PC1选择最后一个ID< -------错误
4PC2选择最后一个ID
如何配置数据库或修改php代码以防止这种情况,谢谢你。
答案 0 :(得分:3)
您应该使用mysql_insert_id(或您正在使用的API的等效调用)来获取最后插入的行的ID。
我想你现在正在这样做:
SELECT MAX(id) FROM yourtable
除非您使用交易,否则此操作无效。但是使用函数mysql_insert_id
是更好的方法。
在文件中还有一个警告和一些注意事项,你应该阅读:
警告:mysql_insert_id()会将原生MySQL C API函数mysql_insert_id()的返回类型转换为long类型(在PHP中命名为int)。如果AUTO_INCREMENT列的列类型为BIGINT(64位),则转换可能会导致值不正确。而是在SQL查询中使用内部MySQL SQL函数LAST_INSERT_ID()。
注意:因为mysql_insert_id()作用于上次执行的查询,所以请务必在生成值的查询后立即调用mysql_insert_id()。
注意:MySQL SQL函数LAST_INSERT_ID()的值始终包含最近生成的AUTO_INCREMENT值,并且不会在查询之间重置。
答案 1 :(得分:2)
SELECT LAST_INSERT_ID();
您将获得当前连接的最后一个自动生成的ID,而不是整个服务器。因此,如果在另一个连接中创建了另一个记录,它将不会影响LAST_INSERT_ID()返回的结果。
答案 2 :(得分:2)
MySQL将在每个客户端(计算机)连接的任何INSERT
语句之后立即返回正确的最后插入ID,因此您不必担心;服务器不会混淆它们。来自documentation:
每个客户端将收到客户端执行的最后一个语句的最后插入ID。
只要您在PHP代码中调用mysql_insert_id()
来检索插入ID,就没什么可担心的了。
答案 3 :(得分:2)
mySQL具有LAST_INSERT_ID()
功能。
PHP等价物(如果使用经典的mysql函数)是mysql_insert_id()
,但在INSERT查询后该函数应该被称为立即,因为它作用于最后一次查询
这些功能基于per 连接,不会受到其他客户端插入的记录的影响。