php - MySQL递增值直到它在单个查询中唯一
问题描述
有没有办法增加一个值,直到它在单个 MySQL 查询中是唯一的?
假设您有一个以微时间记录 Unix 时间戳的表,并且您想插入一行,但是您可以将微时间递增,直到它成为唯一时间。在一个查询中,这可能吗?
在伪代码中,类似于(使用 PHP):
INSERT INTO items (time) VALUES (WHILE((SELECT COUNT(*) WHERE time={$newValue})>0,time = time+0.000001));
我知道伪代码不起作用,但希望它大致说明了我想做的事情。
解决方案
这是一个通用的策略:
- 首先,请确保您没有使用 microtime 作为主键...... (这与以下内容无关 - 这只是一个好习惯)
现在:
BEGIN TRANSACTION
(具有合适的隔离级别)SELECT MAX(microtime) FROM
...找到现在存储的最大值。INSERT
......有合适的时间。COMMIT
正确使用的事务将导致步骤#1-4 是原子的。 您可以在知道不会发生比赛的情况下执行步骤 #2 和 #3。您可以在“第 3 步”中进行任意数量的操作,并且所有这些操作都会同时发生。(或者,如果你改为ROLLBACK
,他们都没有。)
推荐阅读
- javascript - 删除具有特定名称的 div
- xml - 在写入文件系统时,在 Spark 中将数据帧转换为 XML 会在 StaxXML 中引发空指针异常
- r - R - 根据匹配的字符创建数据框并以不同的方式标记它们
- fusionauth - 使用加盐哈希密码迁移用户?
- react-router - 如何使用多个可选参数和路径占位符渲染嵌套路由?
- wordpress - WP 从 apache 迁移到 nginx 结果 -- 404 -- on https
- json - 将本机图像上传为表单数据
- javascript - 为什么我的时钟代码会减慢我的网站速度
- python - 合并数据框会产生 NaN 值
- javascript - 如何使用 JavaScript 获取 AJAX 的选择值