NUL*_*SER 4 mysql sql timestamp
是否有可能为MySQL中的每条记录获取唯一的时间戳值?
我创建了一个示例表
CREATE TABLE t1 (id int primary key, name varchar(50),
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
Run Code Online (Sandbox Code Playgroud)
并运行一些示例INSERTIONS,似乎是时间戳值重复.
e.g insert into t1(id,name) values(1,"test");
Run Code Online (Sandbox Code Playgroud)
有一天,很快(5.6.4),MySQL将提供小数秒 timestamp列,但是,即使是小数秒不能保证是独一无二的,虽然从理论上说,他们会经常是唯一的,特别是如果你的MySQL限制在一个单一的线.
如果您需要一个临时订购的唯一编号,则可以使用UUID.
SELECT UUID() 产生如下:
45f9b8d6-8f00-11e1-8920-842b2b55ce56
Run Code Online (Sandbox Code Playgroud)
一段时间后:
004b721a-8f01-11e1-8920-842b2b55ce56
Run Code Online (Sandbox Code Playgroud)
一个UUID的前三个部分组成的时间,但是,他们是为了从最高精确度至少,所以你需要使用扭转前三部分SUBSTR()和CONCAT()这样的:
SELECT CONCAT(SUBSTR(UUID(), 15, 4), '-', SUBSTR(UUID(), 10, 4),
'-', SUBSTR(UUID(), 1, 8))
Run Code Online (Sandbox Code Playgroud)
产量:
11e1-8f00-45f9b8d6
Run Code Online (Sandbox Code Playgroud)
你显然不能使用像这样的函数作为默认值,所以你必须在代码中设置它,但它是一个保证唯一的时间顺序值.UUID()工作在比秒(时钟周期)低得多的水平,所以它保证每次调用都是唯一的,并且开销很低(不像auto_increment那样锁定).
在数据库服务器上使用UUID()可能更喜欢使用类似的功能,例如PHP microtime()在应用程序服务器上的功能,因为您的数据库服务器更集中.您可能有多个应用程序(Web)服务器,它可能会生成冲突值,而microtime()仍然不保证唯一值.
| 归档时间: |
|
| 查看次数: |
8583 次 |
| 最近记录: |