mysql - 我可以为 MySQL 中的每条记录获取唯一的 TIMESTAMP

标签 mysql sql timestamp

是否有可能为 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/

相关文章:

mysql - 找不到基表或 View : 1146 Table '' doesn't exist

php - 如果记录为空,则将值连接到表中

sql - 关联记录的最大数量

go - 解码十六进制时间戳,可能是文件时间

php - MySQL Join/WHERE IN 性能

php - 将表单信息发送到存储在数据库中的电子邮件

mysql - sql检查select返回null

sql - 如何跟踪 PostgreSQL 中任何函数的变化

php - 将时间戳 PHP 格式更改为荷兰语

mysql - 计算两个日期之间的时间差(以分钟为单位)