MySQL添加默认值为current_user()的列触发语法错误
问题原因与解决方案
你遇到的问题是MySQL的语法限制导致的:
- 第一个语句成功,是因为
TIMESTAMP类型支持ON UPDATE子句,MySQL原生支持这类时间字段的自动更新逻辑。 - 第二个语句报错,核心原因是**
ON UPDATE仅适用于TIMESTAMP和DATETIME类型的列**,像VARCHAR这类字符串类型无法直接使用该子句实现自动更新,同时CURRENT_USER()也不能作为ON UPDATE的目标值绑定到非时间类型列上。
要实现modified_by字段自动更新为当前操作用户的需求,我们可以用触发器来完成,具体步骤如下:
1. 先添加modified_by列(带默认值)
首先执行这条语句添加字段,设置默认值为当前用户,保证插入新行时自动填充初始值:
ALTER TABLE chartdata.reddit_comments ADD modified_by VARCHAR(50) DEFAULT CURRENT_USER();
2. 创建UPDATE触发器实现自动更新
创建一个BEFORE UPDATE触发器,每次更新行时自动将modified_by设为当前执行操作的数据库用户:
DELIMITER // CREATE TRIGGER update_modified_by BEFORE UPDATE ON chartdata.reddit_comments FOR EACH ROW BEGIN SET NEW.modified_by = CURRENT_USER(); END // DELIMITER ;
这样设置后,每次对reddit_comments表执行UPDATE操作时,该行的modified_by字段都会自动更新为当前操作的数据库用户,和modified_datetime的自动更新效果完全一致。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

