🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> ### ***触发器简单地理解为监视某种操作而触发另一种操作*** ***** 举个简单的例子:当用户在注销自己的账号时,一是为了能留住用户,二是为了整个网站做分析而用到的数据,因为数据是非常宝贵的,如果我们直接对数据表进行删除的话,就会丢掉很多的数据,使得我们后期的工作会遇到困难。 如何处理这个业务呢? 可能很多人都会认为在用户表中设置一个字段,如status,可以操作status,如果注销那么就将status的1改为0,就可以判断出用户是否注销,这样做是非常可以的,但是我们想一想,如果用户数据比较庞大时,注销的人数较多时,这时用户表中就会存在很多的无用的用户数据,这对于数据的读取恨性能带来了一定的影响。 为了解决上述带来的问题,MySQL的触发器来了,用触发器可以很好地解决上述问题,就是建立一个触发器,当监听用户表中的数据被删除时,然后触发跟用户表结构一致的一张表进行添加,(如,user_bak表),这样用户注册的数据全部转移到user_bak表,这样即保证了数据不会物理删除,也保证了原数据表的读取性能,这就是触发器的好处,触发器虽然为我们提供了一个非常便利的操作,但是由于MySQL的触发器是行级触发器,因此在整个性能上还是会受到影响的。 下面通过代码实现: ``` #创建触发器 delimiter //; create trigger tri_user after delete on dou_users for each row begin insert into dou_users_bak values(old.id,old.username,old.password); end; #试着执行一条删除语句: delete from user_info where id = 2; ``` 查看user_bak表,果然多出一条uid为2的数据,说明,触发器已经运行。 > 注:字段名要一 一对应起来,否则会报错的。