MySQL以毫秒存储时间戳

MySQL以毫秒存储时间戳,mysql,sql,Mysql,Sql,我需要创建一个数据库来存储一些每毫秒发生一次的日志。 我创建了下表: CREATE TABLE `log` ( `DataEvento` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `CodiceEvento` int(11) NOT NULL, `IdApplicativo` int(11) NOT NULL, PRIMARY KEY (`D

我需要创建一个数据库来存储一些每毫秒发生一次的日志。 我创建了下表:

CREATE TABLE `log` (
    `DataEvento` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
    `CodiceEvento` int(11) NOT NULL,
    `IdApplicativo` int(11) NOT NULL,
    PRIMARY KEY (`DataEvento`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
以及存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `ScriviEvento`(IN evt_id INT, IN app_id INT, IN evt_descr TEXT)
BEGIN
    DECLARE timestamp_now TIMESTAMP(3) DEFAULT NOW(3);
    INSERT INTO log (DataEvento, CodiceEvento, IdApplicativo) VALUES (timestamp_now, evt_id, app_id);
    IF (LENGTH(evt_descr) > 0) THEN
        INSERT INTO descrizionelog (DataEvento, DescrizioneEvento) VALUES (timestamp_now, evt_descr);
    END IF;
END
手动插入一些条目可以获得正确的时间戳(毫秒),但如果创建线程 在睡眠(1)中,我得到了重复的键错误,如果我在工作台中快速按下执行按钮,同样的情况也会发生

CALL(1, 0, '');

是否有解决方法(不包括使用自动增量id),或者我做错了什么?

假设日志记录的时间戳是唯一的,这是做错了什么。那真的没有道理

我不知道你为什么反对自动增量解决方案。这将是正确的方法:

CREATE TABLE `log` (
    LogId int auto_increment primary key,
    `DataEvento` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
    `CodiceEvento` int NOT NULL,
    `IdApplicativo` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

为什么时间戳不是唯一的?此外:如果我使用自动递增,哪一个是溢出限制?@IssamTP。如果溢出是一个问题,您可以对
LogId
使用
bigint