2013-03-02 26 views
0

我使用MySQL服务器(5.5.27 - 社区服务器)。我有一个表,这个定义:使用SQL触发器设置datetime列

CREATE TABLE IF NOT EXISTS tbl_messages (
    `msg_id` VARCHAR(50) NOT NULL , 
    `msg_text` VARCHAR(50) NULL , 
    PRIMARY KEY (`msg_id`); 

我写的,当我做的刀片,服务器与当前时间,包括与此格式“yyyymmddhhnnssuuuuuu”微秒设置MSG_ID列的触发器。 “u”是微秒。

我创建了一个触发器:

create trigger tbl_messages_trigger 
before insert on tbl_messages 
for each row 

BEGIN 
    SET NEW.msg_id = DATE_FORMAT(NOW(),'%Y%m%d%H%i%s%f'); 
END;$$ 

但MSG_ID列只获得价值是这样的:20130302144818 * *,在零微秒。 ¿是否有可能捕获微秒?

TIA,

+0

似乎与MySQL 5.5版,这是不可能的,我需要5.6.4版本... http://stackoverflow.com/questions/8979558/mysql-now-function-with-high-precision http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-4.html – 2013-03-02 20:09:39

回答

1

从提供的代码我猜你要使用微秒,以尽量减少让同为MSG_ID不同行的可能性。

此外,msg_id是主键,它不应该提供任何对象特定的数据,但只是唯一的。有一个很好的链接:http://en.wikipedia.org/wiki/Surrogate_key

在MySql中处理主键的最佳方式是AUTO_INCREMENT列属性。如果你需要插入时间的消息,你可以为它提供柱:

CREATE TABLE tbl_messages 
(
    `msg_id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `msg_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `msg_text` VARCHAR(50) NULL, 
    PRIMARY KEY (`msg_id`) 
); 
+0

这就是我在寻找!用bigint,我需要58亿年,每秒1000新纪录完成它。谢谢! – 2013-03-08 02:36:24