【发布时间】:2017-07-17 03:56:52
【问题描述】:
我有一个每天接受数百个数据的 php 系统。我使用 MySQL 作为数据库来存储所有数据。
其中一个主表,我们称之为“tableData”,存储所有主数据并有 2 个主键。第一个主键是一个自增整数。第二个主键是submission_num,它以这种格式存储了一个varchar值(rep/yyyy/A.I.integer,例如rep/2017/00021、rep/2017/00023、rep/2016/02345)
当需要将数据提交到tableData中时,php会检索到submission_num的最大个数并将其加1,然后使用新的submission_num将新数据插入到tableData中。 (例如,如果php接收rep/2017/00034为最大数,它将整数部分加1,这将导致新的提交num rep/2017/00035,然后将新数据与新提交一起存储数)
PHP 脚本的算法看起来像这样
获取最大提交数,
查询:SELECT submit_num FROM tableData WHERE substr(submission_num,5,4) = '$curYear' ORDER BY submit_num DESC LIMIT 0, 1整数部分加1
- 存储数据
这种方法引起了问题。当两个或更多用户在正确的时刻点击“提交”按钮时。它们将生成相同的提交编号,并与重复的提交编号一起保存到数据库中(此提交编号必须是唯一的)
有没有一种方法可以暂时锁定我的 PHP 脚本中的任何 Select 查询中的表?
【问题讨论】:
-
顺便说一句,如果我告诉你们不好,我很抱歉。我的英语很糟糕
-
根据使用表的类型,您将使用事务或锁。无论如何,如果您在一个表中有/需要两个自动增量,则表明您可能只需要其中一个,或者您可能需要创建第二个表。