这是表格,
tbl_example:
ID - unique - auto increment,
name- text
num- Notunique
created timestamp curentdatetime
使用 php5.5 和 msyql5.5 每次插入,首先它根据插入的更新时间从表中获取 num 的值例如这是获取最后一列 Num 值的查询:
$sql1 = "SELECT num FROM tbl_example ORDER BY created DESC LIMIT 1"
现在因为它得到了添加的最后一行的值,带有 create 列时间戳,插入的新查询将是例如:
$sql2 "INSERT INTO tbl_example (name, num) VALUES ('TEMPNAME', $sql1 + 1)"
注意:这里我只在查询中添加了 $sql1,它在功能上不返回值,只是为了让我的问题易于理解。
这里 num 列的值将基于 $sql1 的结果,
$question:如果两个用户或三个用户在相同的第二个精确时间运行查询,那么 $sql1 的结果对于其中三个将是相同的,因为在 $sql2 上数据将插入并且值num column 三个相同,
出于某种原因,我无法使 num 列保持唯一,
在这种情况下如何防止重复?
最佳答案
去here , 他们解释了如何使用 lastinsertid
.
这就是您要找的。p>
如果你想在一个用分号分隔的查询中完成,这都是关于查询和 SQL,而不是 Php。
像这样的东西应该可以完成工作:
SET @tmp=(SELECT MAX(NUM)+1 FROM tbl_example);
LOCK TABLES tbl_example READ;
INSERT INTO tbl_example (name, num) VALUES ('TEMPNAME', @tmp);
UNLOCK TABLES;
但是您的问题似乎是数据库设计以及缺乏客户端-服务器和 SQL 知识...
关于php - 新行基于上一行的数据,如何防止重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24035647/