最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql中触发器的简单实例

来源:懂视网 责编:小采 时间:2020-11-09 09:54:26
文档

mysql中触发器的简单实例

mysql中触发器的简单实例:一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: 代码如下 delimiter | create trigger t_trigger before insert on t for each row begin set @x = hello trigger
推荐度:
导读mysql中触发器的简单实例:一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: 代码如下 delimiter | create trigger t_trigger before insert on t for each row begin set @x = hello trigger

一个简单的例子

1.1. 创建表:

create table t(s1 integer);

1.2. 触发器:

代码如下
?delimiter |
create trigger t_trigger before insert on t for each row
begin set @x = "hello trigger";
set NEW.s1 = 55;
end;


|
1.3. 如果触发器创建错误,可能只能删除了,至少我试过不能replace

drop trigger t_trigger;

1.4. 当执行insert 时:

insert into t values(1);

1.5. 会执行触发器t_trigger

select @x,t.* from t;

1.6. 可以看到结果:

1.7可以使用 SHOW TRIGGERS; 查看新建的触发器


#创建触发器,当往order表中添加记录是,更新goods表

代码如下
delimiter $
CREATE TRIGGER trigger1
AFTER INSERT ON `order`
FOR EACH ROW
BEGIN
UPDATE goods SET num=num-new.much WHERE id=new.gid;
END$

执行

代码如下
INSERT INTO `order` (gid,much) VALUES(1,5)

SELECT * FROM goods WHERE id=1


发现 电视机的数量剩下30

当执行

代码如下
INSERT INTO `order` (gid,much) VALUES(2,100)



发现
冰箱的数量剩下-77

这是一个很明显的漏洞,如何补救呢?
由于update事件是在insert之后发生的,所以我们无法事先对用户的下单数量(即order表
中的much字段)进行过滤
解决办法:
在创建触发器的时候,将after关键字改成before,并对用户的下单数量进行判断


首先,得删除先去的触发器
drop trigger trigger1;

代码如下
#创建触发器
#触发时间:before
delimiter $
CREATE TRIGGER trigger1
BEFORE INSERT ON `order`
FOR EACH ROW
BEGIN
IF new.much >5 THEN
SET new.much=5
END IF;
UPDATE goods SET num=num-new.much WHERE id=new.gid;
END$

这样,当执行INSERT INTO `order` (gid,much) VALUES(2,100)的时候,写入order表的下单数量其实只有5,同样,goods表中的库存数量只有减少5,因为在insert操作之前先触发了
update操作,借此可以对下单数量做个判断

下面我们来做个题目

现在有张表user(id,name,pass)

还有一张表user_data(,d_id,d_name,d_tel);

我想让在user表添加一个记录的时候触发使user_data也添加一条记录.

比如记录是 1 , 张三,114

这个触发器在mysql中要怎么写,记得是mysql不是别的

代码如下
mysql> delimiter //
-> create trigger sitedata_ins2
-> before insert on user
-> for each row
-> Begin
-> If not exists(select 1 from user_data where d_id=new.id) then
-> insert into user_data(d_id,d_name) values(new.id,new.name);
-> END IF;
-> end;//
-> delimiter ;


或者简单一点:

代码如下
mysql> delimiter //
-> create trigger sitedata_ins2
-> before insert on user
-> for each row
-> Begin
-> insert into user_data(d_id,d_name) values(new.id,new.name);
-> end;//
-> delimiter ;

二种方法都可以,建议你用第一种

文档

mysql中触发器的简单实例

mysql中触发器的简单实例:一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: 代码如下 delimiter | create trigger t_trigger before insert on t for each row begin set @x = hello trigger
推荐度:
标签: 简单 案例 触发器
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top