对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器

触发器用于定制用户对表的行进行【增/删/改】前后的行为

在执行创建触发器前一定要修改SQL语句终止符 -> 因为触发器中有sql语句也使用了【; 号】如果不修改语句终止符当执行创建触发器的语句的时候遇到触发器中的SQL语句的【; 号】语句就会结束,此时创建触发器的语句还没有执行完就结束了就会导致报错)

在执行完创建触发器后一定要把SQL语句终止符修改回原来的SQL语句终止符【; 号】 -> 因为创建触发器语句的下面其他SQL语句还是会使用【; 号】作为SQL语句终止符

触发器是数据库级别做的操作

1. 修改SQL语句的终止符(语句结束符),默认为 ;

# delimiter 符号

delimiter //

2. 插入数据前的触发器

# 基本语法

delimiter //
create trigger 触发器名称 before insert on 表名 for each row
begin
    SQL语句;
    SQL语句; 
end //
delimiter ;

# 当 t1 表有数据插入前就会执行触发器里面的SQL语句

delimiter //
create trigger t_device before insert on t1 for each row
begin
    insert into t2(name,age) values ('Kevin', 123);
end //
delimiter ;

# 使用触发器

insert into t1(name, age, sex) values('Amy', 12, '女');

3. 插入数据后的触发器

# 基本语法

delimiter //
create trigger 触发器名称 after insert on 表名 for each row
begin
    SQL语句;
    SQL语句;
end //
delimiter ;

# 当 t1 表有数据插入后就会执行触发器里面的SQL语句

delimiter //
create trigger t_device after insert on t1 for each row
begin
    insert into t2(name,age) values ('Kevin', 123);
end //
delimiter ;

# 使用触发器

insert into t1(name,age,sex) values('张三',15,'男');

4. 修改数据前的触发器

# 基本语法

delimiter //
create trigger 触发器名称 before update on 表名 for each row
begin
    SQL语句;
    SQL语句;
end //
delimiter ;

# 当 t1 表修改数据前就会执行触发器里面的SQL语句

delimiter //
create trigger t_device before update on t1 for each row
begin
    insert into t2(name,age) values ('Kevin', 12);
    insert into t2(name,age) values ('Yeung', 13);
end //
delimiter ;

# 使用触发器

update t1 set name = '李四' where id = 10;

5. 修改数据后的触发器

# 基本语法

delimiter //
create trigger 触发器名称 after update on 表名 for each row
begin
    SQL语句;
    SQL语句;
end //
delimiter ;

# 当 t1 表修改数据后就会执行触发器里面的SQL语句

delimiter //
create trigger t_device after update on t1 for each row
begin
    insert into t2(name,age) values ('Kevin', 12);
    insert into t2(name,age) values ('Yeung', 13);
end //
delimiter ;

# 使用触发器

update t1 set name = '李四' where id = 10;

6. 删除数据前的触发器

# 基本语法

delimiter //
create trigger 触发器名称 before delete on 表名 for each row
begin
    SQL语句;
    SQL语句;
end //
delimiter ;

# 当 t1 表删除数据前就会执行触发器里面的SQL语句

delimiter //
create trigger t_device after delete on t1 for each row
begin
    insert into t2(name,age) values ('Kevin', 12);
    insert into t2(name,age) values ('Yeung', 13);
end //
delimiter ;

# 使用触发器

delete from t1 where id = 10;

7.删除数据后的触发器

# 基本语法

delimiter //
create trigger 触发器名称 after delete on 表名 for each row
begin
    SQL语句;
    SQL语句;
end //
delimiter ;

# 当 t1 表删除数据后就会执行触发器里面的SQL语句

delimiter //
create trigger t_device after delete on t1 for each row
begin
    insert into t2(name,age) values ('Kevin', 12);
    insert into t2(name,age) values ('Yeung', 13);
end //
delimiter ;

# 使用触发器

delete from t1 where id = 9;

8.可以通过 new 或 old 关键字获取对数据进行操作后的新旧数据

  • 插入数据可以获取到新数据

delimiter //
create trigger t_device after insert on t1 for each row
begin
    insert into t2(name,age) values (new.name, new.age);
end //
delimiter ;

# 使用触发器

insert into t1(name,age,sex) values('Amy', 18, '女')

  • 修改数据可以获取到新旧数据

delimiter //
create trigger t_device after update on t1 for each row
begin
    insert into t2(name,age) values (old.name, old.age);
    insert into t2(name,age) values (new.name, new.age);
end //
delimiter ;

# 使用触发器

update t1 set name='张三', age='19' where id = 11;

  • 删除数据可以获取到旧数据

delimiter //
create trigger t_device after delete on t1 for each row
begin
    insert into t2(name,age) values (old.name, old.age);
end //
delimiter ;

# 使用触发器

delete from t1 where id = 11;

9.删除触发器

# drop trigger 触发器名称

drop trigger t_device