两个用户同时提交数据,如何避免数据库重复录入?

How to avoid duplicate entry in the database if the data is submitted from two users at the same time?

我的问题有点令人困惑,我知道我的问题听起来可能与此处的其他问题相似。我有一个编号的表格,并根据数据库中的最后一个值增加 1。 例如在数据库中:

ID | ApplicationNumber
 1 |    1
 2 |    2

因此,如果用户生成另一个表单,它将显示为:Application Number 3。并且它会在数据库中保存为应用程序编号 3。但是如果有两个用户同时提交表单怎么办?两者都填写了编号为:Application Number 3 的表格,在我的 INSERT INTO 执行查询以查找数据库中的最后一个值之前,我可以 +1 到应用程序编号值之前的值提交到数据库。我让两个用户同时提交表单,我在数据库中收到的是这样的:

 ID | ApplicationNumber
 1 |    1
 2 |    2
 3 |    3
 4 |    3

我在向数据库中插入内容之前获取最后一个值的查询:

$query = mysqli_query($con,"SELECT table1.ApplicationNumber FROM table1 INNER JOIN table2 ON table1.AdminID = table2.AdminID AND table2.Username = '$user' ORDER BY table1.ApplicationNumber DESC LIMIT 1");

while($row = mysqli_fetch_array($query)) {



    $aNumber = $row['ApplicationNumber'] + 1;
}

如果我没猜错,从数据库的角度来看,有几个简单的选项:

  1. 在 mysql
  2. 中的 ApplicationNumber 列使用 autoincrement
  3. 为此列创建 Unique-key constraint 并以某种方式处理此错误
  4. 您也可以在 select 之前 LOCK the table,这样您就可以独占访问数据。当心,您应该特别注意解锁并了解其他用户将无法使用此 table,同时锁定有效。