保证增加的时间戳ID

时间:2012-09-20 16:15:23

标签: mysql

我可以将主键设置为精确到秒的时间戳。但只有当新行插入最少1秒时才能正常工作。我可以将分辨率提高到微秒,但我想知道它是否有点过分和缓慢。

我想要时间戳,因为它们很容易按时排序,但我不在乎处方超过一秒钟。

生成它们的好方法是什么?

2 个答案:

答案 0 :(得分:2)

这完全取决于您希望处理的查询。

您实际上可以同时使用TIMESTAMP和一些代理主键;像往常一样,后者将是auto_incremented,前者也可以为某些排序查询编制索引:

CREATE TABLE sometable (
  sometable_id INT NOT NULL AUTO_INCREMENT,
  ...
  ts TIMESTAMP,
  PRIMARY KEY (sometable_id),
  KEY (ts)
);

...或者您可以完全删除代理键并且不使用PRIMARY KEY -w使用单个INDEXTIMESTAMP列(请记住,INDEX!= { {1}})。

我会使用第一种方法;它更灵活,更具扩展性。

答案 1 :(得分:2)

如果您希望MySQL自动生成时间戳,您可以使用默认值定义时间戳列,同时仍使用AUTO INCREMENT编号作为主键:

create temporary table tbl (
    id int auto_increment primary key,
    ts timestamp default current_timestamp
    -- other columns follow...
);

要插入新数据,只需省略idts的值:

insert into tbl values ();

select * from tbl;
+----+---------------------+
| id | ts                  |
+----+---------------------+
|  1 | 2012-09-20 18:24:21 |
+----+---------------------+

如果您经常搜索或订购时间,请务必在时间戳列上定义索引...