很快的某一天(5.6.4),MySQL 将在 TIMESTAMP 列中提供小数秒,但是,即使小数秒也不能保证是唯一的,尽管理论上,它们通常是唯一的,特别是如果您将 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()
函数)更可取,因为您的数据库服务器更加集中。您可能有多个应用程序(Web)服务器,它们可能会产生冲突值,并且 microtime() 仍然不能保证唯一值。