是否有可能为 MySQL 中的每条记录获取唯一的时间戳值??..
我创建了一个示例表
CREATE TABLE t1 (id int primary key, name varchar(50),
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
并运行了一些示例 INSERTIONS,似乎时间戳值是重复的。
e.g insert into t1(id,name) values(1,"test");
最佳答案
不久的将来(5.6.4),MySQL 将提供 fractional seconds但是,在 TIMESTAMP
列中,即使是小数秒也不能保证是唯一的。尽管从理论上讲,它们通常是唯一的,尤其是当您将 MySQL 限制为单个线程时。
您可以使用 UUID如果您需要一个临时排序的唯一编号。
SELECT UUID();
产生如下内容:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
一段时间后:
004b721a-8f01-11e1-8920-842b2b55ce56
UUID 的前三部分由时间组成,但是,它们是按从最高精度到最低精度的顺序排列的,因此您需要使用 SUBSTR()
反转前三部分和 CONCAT()
像这样:
SELECT CONCAT(SUBSTR(UUID(), 16, 3), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
产量:
1e1-8f00-45f9b8d6
您显然不能将这样的函数用作默认值,因此您必须在代码中设置它,但它是一个保证唯一的时间顺序值。 UUID()
的工作级别比秒(时钟周期)低得多,因此它保证每次调用都是唯一的并且开销很低(没有像 auto_increment< 那样的锁定
)。
在数据库服务器上使用 UUID()
可能比在应用程序服务器上使用类似的函数(例如 PHP 的 microtime()
函数)更好,因为您的数据库服务器更加集中。您可能有多个应用程序(网络)服务器,它们可能会生成冲突值,并且 microtime()
仍然不能保证唯一值。
有助于理解 UUID 的组成部分
关于mysql - 我可以为 MySQL 中的每条记录获取唯一的 TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10320667/