1.创建触发器的语句:
CREATE TRIGGER <触发器名称> <--
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON <表名称>
FOR EACH ROW
<触发器SQL语句>
-触发器
代码如下 | 复制代码 |
--create trigger 名字 --on 表名 --触发动作 --for/after insert/update/delete --as --t-sql select * from shop_jb --insert into shop_xs values(6,4000,1,GETDATE(),3) -- update shop_jb set stock=stock-1 where id=6 --创建触发器 ---触发器更新完之后,要查看表 update shop3_jb set spec='sp-Z99' where id=2 drop trigger tri1 ---用存储过程来实现,更新完之后,要查看表 exec proc1 ---查看表的触发器 ---查看表的内容 ---删除触发器 |
提示:你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。
实例:
example1:
创建表tab1:
代码如下 | 复制代码 |
DROP TABLE IF EXISTS tab1; CREATE TABLE tab1( tab1_id varchar(11) ); 创建表tab2: DROP TABLE IF EXISTS tab2; |
创建触发器:t_afterinsert_on_tab1
作用:增加tab1表记录后自动将记录增加到tab2表中
代码如下 | 复制代码 |
DROP TRIGGER IF EXISTS t_afterinsert_on_tab1; CREATE TRIGGER t_afterinsert_on_tab1 AFTER INSERT ON tab1 FOR EACH ROW BEGIN insert into tab2(tab2_id) values(new.tab1_id); END; |
测试一下:
代码如下 | 复制代码 |
INSERT INTO tab1(tab1_id) values('0001'); |
看看结果估计两个表都有相同数据!
----------练习--------
代码如下 | 复制代码 |
create trigger tri1 on shop3_jb after insert as select * from inserted insert into shop3_jb values('洗衣机','aa',200,500,getdate()) select * from shop3_jb exec sp_helptrigger shop3_jb drop trigger tri1 create trigger tri2 select * from shop3_jb ---查看表的触发器 exec sp_helptrigger 表名 ---查看表的内容 exec sp_helptext 触发器名 ---删除触发器 drop trigger 触发器名 select * from shop5_xs |
补充语法
触发器 语法
3.1 CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
trigger_time是触发程序的动作时间。它可以是BEFORE或AFTERtrigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:
· INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
· UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
· DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
3.2 可能遇到的问题
如果你在触发器里面对刚刚插入的数据进行了 insert/update, 会造成循环的调用.
如:
create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END
应该使用set:
create trigger test before update on test for each row set NEW.updateTime = NOW(); END
3.3 触发器 与存储过程
触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL
(允许存储程序通过参数将数据返回触发程序)。
而存储过程 可以接受参数,将结果范围给应用程序