如何从错误得到防止ID(how to prevent from getting wrong ID)

2019-09-26 13:39发布

数据库MySQL的= =语言PHP

我编码这样的程序工作

PC1 =电脑1

1.PC1插入数据,从自动递增的新ID。

2.PC1选择最后一个ID

一切工作正常,但..

当你的代码是在同一毫秒使用多台计算机的问题。 例如

  1. PC1insert数据,自动递增的新ID

2.PC2插入数据,自动递增的新ID

3.PC1选择最后一个ID <-------错误

4PC2选择最后一个ID

如何配置数据库或修改PHP代码以防止这种情况,三江源。

Answer 1:

您应该使用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值,并且查询之间不复位。



Answer 2:

在MySQL中,如果你打电话

SELECT LAST_INSERT_ID();

你会得到最后的自动生成的ID来回当前连接,而不是整个服务器。 所以,如果在另一个连接创建另一个记录,它不会影响()由LAST_INSERT_ID返回的结果。



Answer 3:

MySQL将任何后立即返回正确的最后插入的ID INSERT每个客户端(电脑)连接语句,所以你不必担心; 服务器不会混合起来。 从文档 :

每个客户端将收到最后插入的ID为最后语句客户端执行。

只要您拨打mysql_insert_id()在你的PHP代码来检索插入ID,没有什么可担心的。



Answer 4:

MySQL已经在LAST_INSERT_ID()该函数。

PHP的当量(如果你使用了经典的MySQL的功能)的mysql_insert_id()不同的是这个函数应立即插入查询后,因为它作用于制作的最后一个查询调用。

这些功能以每个连接的基础上工作,它不会被其他客户端插入的记录的影响。



文章来源: how to prevent from getting wrong ID