百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Mysql触发器实例教程(创建 删除 修改 查看)
分享文章到:

Mysql触发器实例教程(创建 删除 修改 查看)

发布时间:01/15 来源: 浏览: 关键词:
在学习mysql不久接触到了mysql触发器这个新功能了,以前在msssql有了解过但没深入今天要用到mysql触发器功能了,深入的整理了一些关于触发器相关技术内容,希望对各位有帮助吧。

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

--创建触发器
create trigger tri1
on shop5_xs
after insert
as
update shop3_jb set stock=stock-1 where id=6

---触发器更新完之后,要查看表
create trigger tri3
on shop3_jb
for update
as
select * from shop3_jb

update shop3_jb set spec='sp-Z99' where id=2

drop trigger tri1

---用存储过程来实现,更新完之后,要查看表
alter proc proc1
as
update shop3_jb set spec='sp-111' where id=2
select * from shop3_jb

exec proc1

---查看表的触发器
exec sp_helptrigger 表名

---查看表的内容
exec sp_helptext 触发器名

---删除触发器
drop trigger 触发器名

提示:你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。

实例:

example1:

创建表tab1:

 代码如下

DROP TABLE IF EXISTS tab1;
CREATE TABLE tab1(
tab1_id varchar(11)
);

创建表tab2:


DROP TABLE IF EXISTS tab2;
CREATE TABLE tab2(
tab2_id varchar(11)
);

创建触发器: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
exec sp_helptext tri1

drop trigger tri1

create trigger tri2
on shop3_jb
after delete
as
select * from deleted
delete from shop3_jb where namel='笔记本'

select * from shop3_jb

---查看表的触发器

exec sp_helptrigger 表名

---查看表的内容

exec sp_helptext 触发器名

---删除触发器

drop trigger 触发器名

select * from shop5_xs
select * from shop3_jb

补充语法

触发器 语法

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

 (允许存储程序通过参数将数据返回触发程序)。
而存储过程  可以接受参数,将结果范围给应用程序

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有5人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板