ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
触发器 1、create trigger语句用来创建一个触发器,触发器的作用是当表上有对应SQL语句发生时,则触发执行。 ``` CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW [trigger_order] trigger_body trigger_time: { BEFORE | AFTER } trigger_event: { INSERT | UPDATE | DELETE } trigger_order: { FOLLOWS | PRECEDES } other_trigger_name ``` - [ ] 触发器创建时需要指定对应的表名tbl_name - [ ] Definer关键词用来指定trigger的安全环境 - [ ] Trigger_time指定触发器的执行时间,BEFORE和AFTER指定触发器在表中的每行数据修改前或者后执行 - [ ] Trigger_event指定触发该触发器的具体事件 - [ ] INSERT当新的一行数据插入表中时触发,比如通过执行insert,load data,replace语句插入新数据 - [ ] UPDATE当表的一行数据被修改时触发,比如执行update语句时 - [ ] DELETE当表的一行数据被删除时触发,比如执行delete,replace语句时 - [ ] 当执行insert into … on duplicate key update语句时,当碰到重复行执行update时,则触发update下的触发器 - [ ] 从5.7.2版本开始,可以创建具有相同trigger_time和trigger_event的同一个表上的多个触发器,默认情况下按照创建的时间依次执行,通过指定FOLLOWS/PRECEDES改变执行顺序,即FOLLOWS时表示新创建的触发器后执行,PRECEDES则表示新触发器先执行 - [ ] Trigger_body表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字段,OLD.col_name表示行数据被修改或删除之前的字段数据,NEW.col_name表示行数据被插入或修改之后的字段数据 ``` 示例: delimiter // create trigger simple_trigger after update on students for each row begin insert into students_bak values(old.sid,old.sname,new.sname,old.gender,new.gender,now()); end; // delimiter ; mysql> update students set sname='abc',gender=1; mysql> select * from students_bak; +------+----------+----------+--------+--------+---------------------+ | sid | oldsname | newsname | oldsex | newsex | tstamp | +------+----------+----------+--------+--------+---------------------+ | 1 | a | abc | -1 | 1 | 2017-03-28 16:28:42 | | 2 | b | abc | -1 | 1 | 2017-03-28 16:28:42 | | 3 | c | abc | -1 | 1 | 2017-03-28 16:28:42 | ``` 2、Drop trigger语句用来删除一个触发器 If exists短语用来避免删除不存在的触发器时引发报错 当你执行drop table时,表上的触发器也被drop掉了