MySql无法更新DATETIME字段-找不到记录

时间:2019-07-18 20:33:05

标签: mysql sql heidisql

我在MySql 5.6.10中有一个表定义如下:

Table Definition

当我对来自id_failed_delivery_log列的特定记录进行筛选查询(从HeidiSQL客户端)时,成功找到了记录,但是当我对UPDATE命令使用相同的筛选器时,则找不到记录,也没有错误报告:

Select vs. Update comparison

当我使用相同的过滤器更新其他列时,该更新有效,并且可以看到更新后的值。然后,此特定列的更新存在问题。

我也尝试过使用时间函数而不是硬编码的日期值进行更新,例如使用now()函数,但是我仍然得到相同的结果,但未找到记录。

是否可能是因为“默认”值设置为CURRENT_TIMESTAMP?

1 个答案:

答案 0 :(得分:1)

经过进一步调查,我找到了无法更新该字段的原因。我对数据库的定义并不完全熟悉,我发现在同一模式中有一个触发器迫使将date_created列的值保持不变:

SET @OLDTMP_SQL_MODE=@@SQL_MODE, SQL_MODE='STRICT_ALL_TABLES';
DELIMITER //
CREATE TRIGGER `failed_delivery_log_before_update` BEFORE UPDATE ON 
`failed_delivery_log` FOR EACH ROW BEGIN

    SET NEW.date_created = OLD.date_created ; 

END//
DELIMITER ;
SET SQL_MODE=@OLDTMP_SQL_MODE;

我暂时删除了此触发器以进行测试。一旦删除,更新工作正常。尚未在SQL客户端中报告触发器的执行情况,因此很难确定其执行情况。