我可以将主键设置为精确到秒的时间戳。但只有当新行插入最少1秒时才能正常工作。我可以将分辨率提高到微秒,但我想知道它是否有点过分和缓慢。
我想要时间戳,因为它们很容易按时排序,但我不在乎处方超过一秒钟。
生成它们的好方法是什么?
答案 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使用单个INDEX
列TIMESTAMP
列(请记住,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...
);
要插入新数据,只需省略id
和ts
的值:
insert into tbl values ();
select * from tbl;
+----+---------------------+
| id | ts |
+----+---------------------+
| 1 | 2012-09-20 18:24:21 |
+----+---------------------+
如果您经常搜索或订购时间,请务必在时间戳列上定义索引...