在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、触发器简介1、什么是触发器?触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。 2、触发器的特性
也就是由事件来触发某个操作,事件包括 注意: !!尽量少使用触发器,不建议使用。 假设触发器触发每次执行1s, 触发器尽量少的使用,因为不管如何,它还是很消耗资源,如果使用的话要谨慎的使用,确定它是非常高效的:触发器是针对每一行的;对增删改非常频繁的表上切记不要使用触发器,因为它会非常消耗资源。 二、、创建触发器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
1、创建只有一个执行语句的触发器
例1:创建了一个名为trig1的触发器,一旦在work表中有插入动作,就会自动往time表里插入当前时间 mysql> CREATE TRIGGER trig1 AFTER INSERT -> ON work FOR EACH ROW -> INSERT INTO time VALUES(NOW()); 2、创建有多个执行语句的触发器
例2:定义一个触发器,一旦有满足条件的删除操作,就会执行 mysql> DELIMITER || mysql> CREATE TRIGGER trig2 BEFORE DELETE -> ON work FOR EACH ROW -> BEGIN -> INSERT INTO time VALUES(NOW()); -> INSERT INTO time VALUES(NOW()); -> END|| mysql> DELIMITER ; 3、NEW与OLD详解
① ② ③ 使用方法:
另外, 例3: mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00); mysql> delimiter $$ mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account -> FOR EACH ROW -> BEGIN -> IF NEW.amount < 0 THEN -> SET NEW.amount = 0; -> ELSEIF NEW.amount > 100 THEN -> SET NEW.amount = 100; -> END IF; -> END$$ mysql> delimiter ; mysql> update account set amount=-10 where acct_num=137; mysql> select * from account; +----------+---------+ | acct_num | amount | +----------+---------+ | 137 | 0.00 | | 141 | 1937.50 | | 97 | -100.00 | +----------+---------+ mysql> update account set amount=200 where acct_num=137; mysql> select * from account; +----------+---------+ | acct_num | amount | +----------+---------+ | 137 | 100.00 | | 141 | 1937.50 | | 97 | -100.00 | +----------+---------+ 三、查看触发器1、SHOW TRIGGERS语句查看触发器信息
结果,显示所有触发器的基本信息;无法查询指定的触发器。 2、在information_schema.triggers表中查看触发器信息
结果,显示所有触发器的详细信息;同时,该方法可以查询制定触发器的详细信息。 mysql> select * from information_schema.triggers -> where trigger_name='upd_check'\G; Tips: 所有触发器信息都存储在 四、删除触发器
删除触发器之后最好使用上面的方法查看一遍;同时,也可以使用 Tips: 如果不需要某个触发器时一定要将这个触发器删除,以免造成意外操作,这很关键。 到此这篇关于 |
请发表评论