夜间模式
触发器
触发器是一个可以根据表的改变去修改本身表或者相关表的工具,使用触发器可以实现数据的完整性。
触发器是一个被指定关联到另一个表的数据库对象,当表的特定事件出现时就会被激活。
触发器针对永久表而不是临时表。
触发器实现表数据的级联更改,保证数据的完整性吗,可以记录某些事件,记录可当作日志使用。
其中insert、update、delete语句都拥有alter和before两个条件总共2*3=6个触发器
基础语法
sql
create trigger tr_name
{after|before} {delete|update|insert} ON table_name
for each row
begin
DML+DQL+流程控制
end;
1
2
3
4
5
6
2
3
4
5
6
其中{after|before}表示表中当sql语句发生时,表中的数据状态
- before 表中数据发生改变前的状态,即sql语句使用前
- after 表中数据发生改变后的状态,即sql语句使用后
sql
#查看全部触发器
show triggers;
###
#查看触发器创建语句
show create trigger tr_name;
1
2
3
4
5
2
3
4
5
在mysql中所有触发器存储在information_schema的trigger表中
sql
SELECT * from information_schema.triggers WHERE trigger_name= '触发器名';
1
删除触发器
sql
drop trigger[if exists] [schema_naem.] tr_name;
#[if exists]判断是否存在,存在则删除,避免不存在删除导致的错误
#[schema_naem.]指定触发器所在的数据库,不指定则当前使用库
1
2
3
4
2
3
4
触发器调用过程中会出现两种状态分别是new和old,使用这个可以控制不同状态时候的数据,old表示sql语句使用前的数据,new表示sql语句使用后的语句。
用法
sql
create trigger tr_name
{after|before} {delete|update|insert} ON table_name
for each row
begin
DML+DQL+流程控制
set old.字段1=new.字段1+10;
end;
1
2
3
4
5
6
7
2
3
4
5
6
7
不是 每个类型的触发器都支持old和new
触发器类型 | 支持 |
---|---|
INSERT触发器 | 只有new |
UPDATE触发器 | 有new和old |
DELETE触发器 | 只有old |
MySQL 的触发器中不能对本表进行 insert、update 和 delete 操作,否则会报错
触发器处理本表数据时,使用new.lie_name或old.lie_name