详细说明mysql before中的NEW 和 OLD
在MySQL中,BEFORE触发器是在执行INSERT,UPDATE或DELETE语句之前执行的。在BEFORE触发器中,NEW和OLD是特殊的关键字,用于引用将要或已经被修改的行。
NEW关键字表示将要插入或更新的新行。在INSERT语句中,NEW表示新插入的行。在UPDATE语句中,NEW表示更新后的行(即新行)。在DELETE语句中,NEW没有任何意义。
OLD关键字表示将要或已经被更新或删除的旧行。在INSERT语句中,OLD没有任何意义。在UPDATE语句中,OLD表示更新前的行(即旧行)。在DELETE语句中,OLD表示将要删除的行。
触发器可以使用NEW和OLD来对将要或已经修改的行进行操作。例如,可以使用NEW来设置默认值或对新行进行验证。可以使用OLD来进行日志记录或检查旧行的值是否符合要求。
下面是一个BEFORE触发器的示例,其中使用NEW和OLD来设置默认值和检查旧行的值是否符合要求:
CREATE TRIGGER trig_before_insert
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
SET NEW.column1 = IFNULL(NEW.column1, 'default_value');
IF OLD.column2 < 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Error: column2 must be greater than 10';
END IF;
END;
在上面的示例中,当插入新行时,如果column1为空,则将其设置为默认值。如果旧行的column2小于10,则触发器会抛出一个错误。
原文地址: https://www.cveoy.top/t/topic/bAwh 著作权归作者所有。请勿转载和采集!