有一天很快(5.6.4),MySQL将timestamp列提供fractional seconds,但是,即使是小数秒不能保证是独一无二的,虽然从理论上说,他们会最通常是独一无二的,特别是如果你将MySQL限制在单个线程中。
如果您需要一个临时排序的唯一编号,则可以使用UUID。
SELECT UUID()
产生类似:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
一段时间后,:
004b721a-8f01-11e1-8920-842b2b55ce56
前三个UUID的部分组成的时间,但是,他们为了是从最高的精度至少,所以你需要使用SUBSTR()
和CONCAT()
像这样反转前三部分:
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
个
产量:
11e1-8f00-45f9b8d6
你显然不能使用这样的函数作为默认值,所以你必须将其设置在代码中,但它是一个保证唯一的时间顺序值。 UUID()的工作时间比秒钟(时钟周期)低得多,所以它在每次调用时都保证是唯一的,开销很低(不像auto_increment那样锁定)。
在数据库服务器上使用UUID()可能会优先于使用类似函数,例如应用程序服务器上的PHP microtime()
函数,因为数据库服务器更集中。您可能有多个应用程序(网络)服务器,可能会产生冲突的值,并且microtime()仍不能保证唯一值。
除非您阻止同时插入记录,否则可能存在重复的时间戳。 – 2012-04-25 17:26:40
@MichaelMior我不能增加“TIMESTAMP敏感度”??使用毫秒等? Marcus只使用Select查询。通过肉眼我可以看到它。 – 2012-04-25 17:30:13
MySQL不支持微秒(但5.6.4会),所以我建议去一个整数字段。 – Kostis 2012-04-25 17:30:16