0

我使用 MySQL 服务器(5.5.27 - 社区服务器)。我有一个具有此定义的表:

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

我编写了一个触发器,当我执行插入操作时,服务器将 msg_id 列设置为当前时间,包括微秒,格式为“yyyymmddhhnnssuuuuuu”。“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* 000000 *,微秒为零。¿ 是否可以捕获微秒?

TIA,

4

1 回答 1

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`)
);
于 2013-03-03T03:58:11.607 回答