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 に答える