mysql触发器用法

介绍触发器:mysql响应一下任意一条语句而自动执行的一条MySQL语句

比如:增改插,insert,update,select

用处:1,比如每当一个顾客进入数据表时,都要检查电话号码格式是否正确,email是否正确。

2,每当订购一个产品都要从库存中减去订购的数量。

3,无论何时删除一行都要保留存档一个副本。

这几个例子共同之处在于每个表发生更改时都要自动触发某个事件。

下面举个例子说明删除功能,

第一步创建触发器:

CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt

其中:

trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为BEFORE AFTER
trigger_event:标识触发事件,取值为INSERTUPDATE DELETE
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用BEGIN END 包含的多条语句。

由此可见,可以建立6种触发器,即:BEFORE INSERTBEFORE UPDATEBEFORE DELETEAFTER INSERTAFTER UPDATEAFTER DELETE


 案例(删除数据库保存删除信息)

第一步:准备相应的表

创建员工表

CREATE TABLE `t_employee` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) DEFAULT NULL,

  `age` int(11) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

添加数据

insert into t_employee (name,age) values ('张三',23),('李四',43),('王五',13),('赵六',63),('陈七',47),('钱八',25)

效果:

实现效果

 

创建回收站表

CREATE TABLE `t_trash` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `data` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建回收站表 

第二步 :创建触发器:

CREATE TRIGGER trigger_del_employee

AFTER DELETE ON t_employee

  FOR EACH ROW insert into t_trash (`data`) values(

concat('t_employee 被删除,数据有:',OLD.id,'|',OLD.`name`,'|',OLD.age)

)

注:上面的OLD,指的就是当前咱们要删除的表,如OLD.age 就可以拿到咱们刚刚删除的表中的那一行的数据的age列的值。

 

第三步:测试

现在我去删除employee表中的一条数据:

delete from t_employee where id = 3;

现在我们可以看两张表的数据:

employee表中id为3的数据已经删除

删除后效果 

 

这时候咱们看一下回收站中的数据:

回收站中的数据 

刚才咱们的数据就已经保存在新的表中

⑤.删除触发器

这里要多说一句,咱们自己写代码创建触发器可能会写错,而触发器又不能更新或者覆盖。如果要修改触发器:只能够先删除触发器,然后再重新创建。

语法:

drop TRIGGER 触发器名称;

案例:

drop TRIGGER trigger_del_employee;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值