- 此问题在此处已有答案**:
MySQL Multiple calls to timestamp () in procedure yields the same result(1个答案)
16小时前关门了。
我正在尝试创建一个存储在MySQL中的函数的执行日志。
就像这样:
日志表:
CREATE TABLE log_execution (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
task VARCHAR(255) NOT NULL,
start_time TIMESTAMP(6) NOT NULL,
end_time TIMESTAMP(6));
功能:
CREATE DEFINER=`root`@`localhost` FUNCTION `log_execution`(p_task VARCHAR(255))
RETURNS INT(11)
BEGIN
DECLARE v_start_time TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6);
INSERT INTO log_execution(task, start_time) VALUES(p_task, v_start_time);
SET @SLP = (SELECT SLEEP(5));
UPDATE log_execution SET end_time = CURRENT_TIMESTAMP(6) WHERE start_time = v_start_time;
RETURN ROW_COUNT();
END;
但是当我运行它的时候,开始时间和结束时间总是一样的,即使运行需要几秒钟。
有人知道这是不是一个bug以及如何解决它吗?
我用的是MySQL 5.7.40.
在记录日志时,正确记录执行的开始和结束。
1条答案
按热度按时间z9smfwbn1#
CURRENT_TIMESTAMP()
是NOW()
函数的同义词。https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_now says:
NOW()
返回常量时间,指示语句开始执行的时间。(在存储函数或触发器中,NOW()
返回函数或触发语句开始执行的时间。)这与SYSDATE()
的行为不同,SYSDATE()
返回执行的确切时间。