数据库MySQL的= =语言PHP
我编码这样的程序工作
PC1 =电脑1
步
1.PC1插入数据,从自动递增的新ID。
2.PC1选择最后一个ID
一切工作正常,但..
当你的代码是在同一毫秒使用多台计算机的问题。 例如
- PC1insert数据,自动递增的新ID
2.PC2插入数据,自动递增的新ID
3.PC1选择最后一个ID <-------错误
4PC2选择最后一个ID
如何配置数据库或修改PHP代码以防止这种情况,三江源。
数据库MySQL的= =语言PHP
我编码这样的程序工作
PC1 =电脑1
步
1.PC1插入数据,从自动递增的新ID。
2.PC1选择最后一个ID
一切工作正常,但..
当你的代码是在同一毫秒使用多台计算机的问题。 例如
2.PC2插入数据,自动递增的新ID
3.PC1选择最后一个ID <-------错误
4PC2选择最后一个ID
如何配置数据库或修改PHP代码以防止这种情况,三江源。
您应该使用mysql_insert_id (或等值找你正在使用的API)来获得最后插入的行的ID。
我想,你现在正在做这样的:
SELECT MAX(id) FROM yourtable
这是行不通的,除非你使用的交易。 但是,使用函数mysql_insert_id
是更好的办法。
在documenation也有谨慎和一些注意事项,你应该阅读:
注意 :mysql_insert_id()将本地的MySQL C API函数mysql_insert_id()的返回类型转换为(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值,并且查询之间不复位。
在MySQL中,如果你打电话
SELECT LAST_INSERT_ID();
你会得到最后的自动生成的ID来回当前连接,而不是整个服务器。 所以,如果在另一个连接创建另一个记录,它不会影响()由LAST_INSERT_ID返回的结果。
MySQL将任何后立即返回正确的最后插入的ID INSERT
每个客户端(电脑)连接语句,所以你不必担心; 服务器不会混合起来。 从文档 :
每个客户端将收到最后插入的ID为最后语句客户端执行。
只要您拨打mysql_insert_id()
在你的PHP代码来检索插入ID,没有什么可担心的。
MySQL已经在LAST_INSERT_ID()
该函数。
PHP的当量(如果你使用了经典的MySQL的功能)的mysql_insert_id()
不同的是这个函数应立即插入查询后,因为它作用于制作的最后一个查询调用。
这些功能以每个连接的基础上工作,它不会被其他客户端插入的记录的影响。