MySQL触发器中如何使用OLD关键字来查询触发器前的旧数据值?

2026-04-30 21:181阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计855个文字,预计阅读时间需要4分钟。

MySQL触发器中如何使用OLD关键字来查询触发器前的旧数据值?

MySQL触发器中想读取旧数据,必须使用OLD,但它是伪记录(pseudo-row),只在实际特定时机存在,且字段名必须与原表定义完全一致。

哪些触发器能用 OLD

OLD 仅在 DELETEUPDATE 触发器中可用;INSERT 触发器里访问 OLD 会直接报错:ERROR 1363 (HY000): There is no OLD row in on INSERT trigger

  • BEFORE DELETE:可读 OLD.idOLD.name 等,用于日志记录或条件校验
  • AFTER DELETE:仍可读 OLD,但不能改,也不能再影响原操作(语句已执行完)
  • BEFORE UPDATE:最常用场景,OLD.colNEW.col 同时可用,适合做变更比对
  • AFTER UPDATEOLD 还在,但 NEW 已不可修改(改了也无效)

OLD.col 字段名写错会怎样?

字段名区分大小写,且必须与表结构定义一字不差。

阅读全文

本文共计855个文字,预计阅读时间需要4分钟。

MySQL触发器中如何使用OLD关键字来查询触发器前的旧数据值?

MySQL触发器中想读取旧数据,必须使用OLD,但它是伪记录(pseudo-row),只在实际特定时机存在,且字段名必须与原表定义完全一致。

哪些触发器能用 OLD

OLD 仅在 DELETEUPDATE 触发器中可用;INSERT 触发器里访问 OLD 会直接报错:ERROR 1363 (HY000): There is no OLD row in on INSERT trigger

  • BEFORE DELETE:可读 OLD.idOLD.name 等,用于日志记录或条件校验
  • AFTER DELETE:仍可读 OLD,但不能改,也不能再影响原操作(语句已执行完)
  • BEFORE UPDATE:最常用场景,OLD.colNEW.col 同时可用,适合做变更比对
  • AFTER UPDATEOLD 还在,但 NEW 已不可修改(改了也无效)

OLD.col 字段名写错会怎样?

字段名区分大小写,且必须与表结构定义一字不差。

阅读全文