You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL插入时拼接Job名与时间戳:触发器选型及创建方法

应该用BEFORE INSERT触发器,附创建步骤

很明确,你得选BEFORE INSERT触发器——原因很直白:你需要在数据真正写入transfer_job表之前,修改要插入的job_name值。AFTER INSERT触发器是在数据已经成功插入后才触发的,这时候再想改原始插入的字段值就晚了,完全满足不了你的需求。

下面是创建这个触发器的具体SQL代码:

DELIMITER //
CREATE TRIGGER modify_transfer_job_name_before_insert
BEFORE INSERT ON transfer_job
FOR EACH ROW
BEGIN
    -- 拼接原始job_name与当前日期(YYYYMMDD格式)
    SET NEW.job_name = CONCAT(NEW.job_name, '_', DATE_FORMAT(CURDATE(), '%Y%m%d'));
END //
DELIMITER ;

代码细节说明:

  • DELIMITER //:临时修改SQL语句的结束符,因为触发器体内部有分号,避免MySQL提前终止解析。
  • modify_transfer_job_name_before_insert:触发器的自定义名称,你可以根据自己的习惯调整,只要做到见名知意即可。
  • BEFORE INSERT ON transfer_job:指定触发时机为插入操作之前,作用目标是transfer_job表。
  • FOR EACH ROW:表示每插入一行数据,就执行一次触发器内的逻辑。
  • SET NEW.job_name = ...NEW代表即将插入的那条记录,通过这个语句修改它的job_name字段。DATE_FORMAT(CURDATE(), '%Y%m%d')会生成类似20240520的日期字符串;如果需要包含精确到时分秒的时间戳,可以改成DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'),生成20240520143510这类格式。

测试验证:

当你执行原本的插入语句:

insert into transfer_job (job_name, status) values ('Drift', 'Pending');

此时transfer_job表中插入的job_name会自动变成Drift_20240520(日期替换为当前系统日期),完美匹配你的需求。

内容的提问来源于stack exchange,提问作者Mohammed Mohideen M Z

火山引擎 最新活动