MySql 无法更新 DATETIME 字段 - 未找到记录
MySql cannot update a DATETIME field - no record found
我在 MySql 5.6.10 中有一个 table 定义如下:
当我为 id_failed_delivery_log 列上的特定记录过滤执行 select 查询(来自 HeidiSQL 客户端)时,成功找到了记录,但是当我对 UPDATE 使用相同的过滤器时命令,然后没有找到记录,也没有报错:
当我使用相同的过滤器更新不同的列时,更新有效并且我可以看到更新后的值。那么这个特定列的更新有问题。
我也尝试过使用时间函数而不是硬编码日期值进行更新,例如使用 now() 函数,但我仍然得到相同的结果,但找不到记录。
会不会是'Default'的值设置为CURRENT_TIMESTAMP造成的?
经过进一步调查,我找到了无法更新该字段的原因。我并不完全熟悉数据库定义,我发现在同一模式中有一个触发器强制保持 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客户端没有报告触发执行,所以很难查到它的执行。
我在 MySql 5.6.10 中有一个 table 定义如下:
当我为 id_failed_delivery_log 列上的特定记录过滤执行 select 查询(来自 HeidiSQL 客户端)时,成功找到了记录,但是当我对 UPDATE 使用相同的过滤器时命令,然后没有找到记录,也没有报错:
当我使用相同的过滤器更新不同的列时,更新有效并且我可以看到更新后的值。那么这个特定列的更新有问题。
我也尝试过使用时间函数而不是硬编码日期值进行更新,例如使用 now() 函数,但我仍然得到相同的结果,但找不到记录。
会不会是'Default'的值设置为CURRENT_TIMESTAMP造成的?
经过进一步调查,我找到了无法更新该字段的原因。我并不完全熟悉数据库定义,我发现在同一模式中有一个触发器强制保持 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客户端没有报告触发执行,所以很难查到它的执行。