MySQL触发器中如何使用OLD关键字来查询触发器前的旧数据值?
- 内容介绍
- 文章标签
- 相关推荐
本文共计855个文字,预计阅读时间需要4分钟。
MySQL触发器中想读取旧数据,必须使用OLD,但它是伪记录(pseudo-row),只在实际特定时机存在,且字段名必须与原表定义完全一致。
哪些触发器能用 OLD?
OLD 仅在 DELETE 和 UPDATE 触发器中可用;INSERT 触发器里访问 OLD 会直接报错:ERROR 1363 (HY000): There is no OLD row in on INSERT trigger。
-
BEFORE DELETE:可读OLD.id、OLD.name等,用于日志记录或条件校验 -
AFTER DELETE:仍可读OLD,但不能改,也不能再影响原操作(语句已执行完) -
BEFORE UPDATE:最常用场景,OLD.col和NEW.col同时可用,适合做变更比对 -
AFTER UPDATE:OLD还在,但NEW已不可修改(改了也无效)
OLD.col 字段名写错会怎样?
字段名区分大小写,且必须与表结构定义一字不差。
本文共计855个文字,预计阅读时间需要4分钟。
MySQL触发器中想读取旧数据,必须使用OLD,但它是伪记录(pseudo-row),只在实际特定时机存在,且字段名必须与原表定义完全一致。
哪些触发器能用 OLD?
OLD 仅在 DELETE 和 UPDATE 触发器中可用;INSERT 触发器里访问 OLD 会直接报错:ERROR 1363 (HY000): There is no OLD row in on INSERT trigger。
-
BEFORE DELETE:可读OLD.id、OLD.name等,用于日志记录或条件校验 -
AFTER DELETE:仍可读OLD,但不能改,也不能再影响原操作(语句已执行完) -
BEFORE UPDATE:最常用场景,OLD.col和NEW.col同时可用,适合做变更比对 -
AFTER UPDATE:OLD还在,但NEW已不可修改(改了也无效)
OLD.col 字段名写错会怎样?
字段名区分大小写,且必须与表结构定义一字不差。

