mysql - 使用 NOW 更新 MYSQL 上的列无法正常工作

标签 mysql date triggers timestamp procedure

我需要使用 Now() 在表中插入一条记录来测量触发器消耗的时间。 我有一个名为“MyTable”的表,带有触发器(插入之前),如下所示:

create trigger ...

Set @startTime = NOW();

-- Do complex an expensive operations on the MyTable..

Set @endTime = NOW();

Insert into myLogTable(tableName, Start, End, Creation)
Values ('MyTable', @startTime, @endTime, NOW());

问题是表在“开始”、“结束”和“创建”列中始终获得相同的值,即使放置 Sleep(10) 以获得很大差异也是如此。这就像 mysql 将 CURRENT_TIMESTAMP 更改为常量值。

myLogTable 充满了类似的内容:

  • 我的表格 - 2015-01-01 10:45:00 - 2015-01-01 10:45:00 - 2015-01-01 10:45:00
  • 我的表格 - 2015-01-02 10:11:10 - 2015-01-02 10:11:10 - 2015-01-02 10:11:10
  • 我的表格 - 2015-01-03 10:55:00 - 2015-01-03 10:55:00 - 2015-01-03 10:55:00

我尝试使用时间戳函数或列,但没有成功,而且我总是在 3 列中获得相同的值。

如何记录触发器在每次调用中消耗的时间?

最佳答案

NOW() 函数在 SQL 语句的开始处计算;它返回一个在 SQL 语句执行期间保持不变的值。语句中对 NOW() 的每次引用都会返回相同的值。该语句执行的函数或触发器中的任何引用都会返回相同的常量值。

SYSDATE() 函数的不同之处在于,它在执行时返回日期时间值。

比较:

SELECT NOW(), SLEEP(5), NOW(); 
SELECT SYSDATE(), SLEEP(5), SYSDATE();

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_sysdate

关于mysql - 使用 NOW 更新 MYSQL 上的列无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27928108/

相关文章:

mysql - MariaDB/mySQL 分组嵌套 SQL 结果无法像 MSSQL 中那样工作?

mysql - 如何避免在多对多关系中使用相同的 ID

python-3.x - 如何在Python中将具有相同值的两行合并为单行?

javascript - 在 input[type=file] 上使用 click() 时出现问题

php - 为什么我的登录表单无法在 php 中正确提交

php - 错误(1054): Unknown column 'enable_flag' in 'field_list'

python-3.x - Dark Sky API 在 Python 3 中每天迭代一年

javascript - 将日期字符串转换为数组

postgresql - 错误 : unterminated quoted string at or near

mysql - 关于MySQL触发器使用的问题