You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:38:33