我需要使用 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/