使用SQL触发器设置datetime列
问题描述:
我使用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,
答
从提供的代码我猜你要使用微秒,以尽量减少让同为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
似乎与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