我在MySql 5.6.10中有一个表定义如下:
当我对来自id_failed_delivery_log列的特定记录进行筛选查询(从HeidiSQL客户端)时,成功找到了记录,但是当我对UPDATE命令使用相同的筛选器时,则找不到记录,也没有错误报告:
当我使用相同的过滤器更新其他列时,该更新有效,并且可以看到更新后的值。然后,此特定列的更新存在问题。
我也尝试过使用时间函数而不是硬编码的日期值进行更新,例如使用now()函数,但是我仍然得到相同的结果,但未找到记录。
是否可能是因为“默认”值设置为CURRENT_TIMESTAMP?
答案 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客户端中报告触发器的执行情况,因此很难确定其执行情况。