这是表格,
tbl_example:
ID - unique - auto increment,
name- text
num- Notunique
created timestamp curentdatetime
使用php5.5和msyql5.5每次插入时,首先根据更新的插入时间从表中获取num的值。例如,下面是获取最后一列 num value:
的查询当创建列的时间戳时,插入的新查询将如下所示:$sql = "SELECT num FROM tbl_example ORDER BY created DESC LIMIT 1"
$sql2 "INSERT INTO tbl_example (name, num) VALUES ('TEMPNAME', $sql1 + 1)"
注意:这里我只在查询中添加了$sql1,它在功能上不返回值,但只使我的问题可以理解。
和这里一样,列num的值将基于$sql1,
的结果。$question:如果两个用户或三个用户在同一秒相同的时间运行查询,那么$sql1的结果将对他们中的三个相同,因为在$sql2上,数据将插入并且num列的值将对他们中的三个相同,
由于某些原因,我不能保持列num唯一,
在这种情况下,我怎样才能防止重复呢?到这里,他们解释如何使用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知识…
您可以使用select into来同时执行插入:
INSERT INTO tbl_example (name, num) VALUES (name, num)
SELECT tbl_example.name, Max(tbl_example.num)+1
FROM tbl_example GROUP BY tbl_example.num
尝试:
INSERT INTO tbl_example (name, num) select 'TEMPNAME', MAX(num)+1 from tbl_example
或者,如果您仍然需要按日期排序:
INSERT INTO tbl_example (name, num) select 'TEMPNAME', num+1 from tbl_example order by created DESC limit 1