1.1MySQL触发器基础 触发器分类 MySql执行时机和数据操作类型分类表 按执行时机分类 BEFORE触发器:在数据操作之前执行触发器逻辑 AFTER触发器:在数据操作之后执行触发器逻辑 按数据操作类型分类INSERT触发器:在插入数据之前或之后执行触发器逻辑 UPDATE触发器:在更新数据之前或之后执行触发器逻辑 DELETE触发器:在删除数据之前或之后执行触发器逻辑 额外补充举例:
BEFORE: | 表示在数据操作之前执行触发器逻辑 1.BEFORE: -- 在插入数据之前执行的逻辑 CREATE TRIGGER `trigger_before_insert` BEFORE INSERT ON `mytable` FOR EACH ROW BEGIN END; |
---|---|
AFTER: | 表示在数据操作之后执行触发器逻辑 2.AFTER: -- 在更新数据之后执行的逻辑END; CREATE TRIGGER `trigger_after_update` AFTER UPDATE ON `mytable`FOR EACH ROWBEGIN |
FOR EACH ROW: | 表示针对每一行数据执行触发器逻辑 3.FOR EACH ROW: -- 针对每一行删除操作执行的逻辑 CREATE TRIGGER `trigger_for_each_row` AFTER DELETE ON `mytable` FOR EACH ROW BEGIN END; |
BEGIN和END: | 用于定义触发器的逻辑代码块 4.BEGIN和END: CREATE TRIGGER `trigger_multiple_statements` AFTER INSERT ON `mytable` FOR EACH ROW BEGIN DECLARE var INT; SET var = NEW.age + 10; IF (var > 50) THEN -- 逻辑语句1 ELSE -- 逻辑语句2 END IF; END; |
NEW: | 代表要插入、更新或删除的新数据引用。可以通过NEW来访问新值 5.NEW: CREATE TRIGGER `trigger_new_value` BEFORE INSERT ON `mytable` FOR EACH ROW BEGIN SET NEW.name = UPPER(NEW.name); END; |
OLD: | 代表要更新或删除的旧数据引用。只能在UPDATE和DELETE触发器中使用 6.OLD: CREATE TRIGGER `trigger_old_value` BEFORE UPDATE ON `mytable` FOR EACH ROW BEGIN IF (OLD.age < NEW.age) THEN -- 逻辑语句 END IF; END; |
SET: | 用于设置变量的值,可用于对NEW或OLD的字段进行赋值操作 7.SET: CREATE TRIGGER `trigger_set_value` AFTER INSERT ON `mytable` FOR EACH ROW BEGIN SET @total = @total + NEW.quantity; END; |
IF和THEN: | 用于条件判断,控制触发器逻辑的执行流程 8.IF和THEN: CREATE TRIGGER `trigger_if_then` BEFORE DELETE ON `mytable` FOR EACH ROW BEGIN IF (OLD.age > 30) THEN -- 逻辑语句1 ELSE -- 逻辑语句2 END IF; END; |
INSERT、UPDATE、DELETE: | 分别表示插入、更新和删除操作的关键字,可用于在相应类型的触发器中执行相应的逻辑[不在举例;往期已经详解] |
-- 触发器逻辑
CREATE TRIGGER trigger_name{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_nameFOR EACH ROWBEGIN END;
选项参数 | 详解说明 |
---|---|
trigger_name: | 触发器的名称,你可以根据需要自定 |
{BEFORE | AFTER}: | 指定触发器在数据操作之前(BEFORE)或之后(AFTER)执行 |
{INSERT | UPDATE | DELETE}: | 指定触发器在哪种类型的数据操作时触发,可以是插入数据(INSERT)、更新数据(UPDATE)或删除数据(DELETE) |
table_name: | 指定触发器所属的表名 |
FOR EACH ROW: | 确保触发器逻辑应用于每一行受影响的数据 |
BEGIN 和 END: | 定义了触发器逻辑的开始和结束位置,你可以在其中编写相应的代码来实现需要的业务逻辑 |
CREATE TRIGGER trigger_name ...
DROP TRIGGER IF EXISTS trigger_name;
触发器的执行时机和对应条件表 BEFORE触发器:在数据操作之前执行 AFTER触发器:在数据操作之后执行 FOR EACH ROW:对每一行数据执行触发器逻辑