Php 如何在更新数据库时停止重复条目和缺少序列

Php 如何在更新数据库时停止重复条目和缺少序列,php,mysql,database,Php,Mysql,Database,我从一个表中获取最大发票号,并在其中递增1,然后用递增的值更新同一个表,问题是多个用户正在执行此操作,因此有时它会错过序列,有时会为不同的作业生成相同的序列。我无法使“发票无”字段唯一,因为其他作业的字段为0。 代码是这样的 $res=mysql_query("select max(invoice_no) from complaints_master"); $result=mysql_fetch_array($res); $code_id=$result[0]+1; // update invo

我从一个表中获取最大发票号,并在其中递增1,然后用递增的值更新同一个表,问题是多个用户正在执行此操作,因此有时它会错过序列,有时会为不同的作业生成相同的序列。我无法使“发票无”字段唯一,因为其他作业的字段为0。 代码是这样的

$res=mysql_query("select max(invoice_no) from complaints_master");
$result=mysql_fetch_array($res);
$code_id=$result[0]+1;
// update invoice details in complaint master
$usr="update complaints_master set invoice_no='$code_id', invoice_flag='1', invoice_date='$today', invoice_total_amt='$_POST[final_total]' where job_no='$_REQUEST[job_no]'";

您需要将事务级别设置为
SERIALIZABLE
,以确保每个
MAX(发票号)+1
向客户端返回唯一的值。不确定在使用PHP时是如何做到这一点的,但下面是MySQL文档:。

更新为使用select子查询而不是2个查询时如何