php - 新行基于上一行的数据,如何防止重复

标签 php mysql

这是表格,

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 . 这就是您要找的。

如果你想在一个用分号分隔的查询中完成,这都是关于查询和 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/

相关文章:

php - Sonata admin - 侧面菜单无法正常工作

php - 我可以更改 ZipArchive 的压缩级别吗?

php - 使用/jQuery 进行简单的电子邮件验证

java - 主题左侧栏上的链接在 liferay 6.1.2 GA3 中不起作用

php - 使用 PHP/MySQL 进行搜索过滤

python - 如何使用 LIMIT 在 python 3 中编写 mysql 准备好的 SELECT 语句?

php - 插入查询-存储时间

php - 多个 PHP session

php - 我该如何调整它才能接受 .flv 文件?

MYSQL VARCHAR 或 CHAR 固定长度字符串