2013-03-02 55 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