IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

数据库中触发器before与after认识

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

Before与After区别:

before:(insert、update)可以对new进行修改,after不能对new进行修改,两者都不能修改old数据。

对于INSERT语句, 只有NEW是合法的;

对于DELETE语句,只有OLD才合法;

对于UPDATE语句,NEW、OLD可以同时使用。

例子如下:

 mysql> select * from t1; 
 +
 | id | name |
 +
 | 1 | zhang |
 +
 mysql> delimiter //
 mysql> create trigger tb before update on t1 
     -> for each row
     -> begin
     -> set NEW.id=NEW.id+5;
     -> set NEW.name=upper(NEW.name);
     -> insert into t2 values(NEW.id,NEW.name);
     -> end;//

 分隔符换回分号
 mysql> delimiter ;
 mysql> update t1 set name='huang' where id=1;
 Query OK, 1 row affected (0.01 sec)
 Rows matched: 1  Changed: 1  Warnings: 0

 mysql> select * from t1 ;                    
 +
 | id | name  |
 +
 |  6 | HUANG |
 +
 1 row in set (0.00 sec)
 mysql> select * from t2;
 +
 | id | name  |
 +
 |  6 | HUANG |
 +
 1 row in set (0.00 sec)

由上可知,如果trigger用的是before,则可以修改new的值,并写入到数据库中

 同样的代码,把before改成after,则会报错
 mysql> delimiter //
 mysql> create trigger ta after update on t1  
     -> for each row
     -> begin
     -> set NEW.id=NEW.id+5;
     -> set NEW.name=upper(NEW.name);
     -> insert into t2 values (NEW.id,NEW.name);
     -> end;//
 ERROR 1362 (HY000): Updating of NEW row is not allowed in after trigger

将after内容改写如下:运行正常

 mysql> delimiter //
 mysql> create trigger ta after update on t1 for each row
     -> begin
     -> insert into t2 values (OLD.id,NEW.name);
     -> end;//
 Query OK, 0 rows affected (0.00 sec)

 mysql> delimiter ;
 mysql> update t1 set name='chen' where id=6;

 mysql> select * from t1;
 +
 | id | name |
 +
 |  6 | chen |
 +
 1 row in set (0.00 sec)

 mysql> select * from t2;
 +
 | id | name  |
 +
 |  6 | HUANG |
 |  6 | chen  |
 +
 2 rows in set (0.00 sec)

总结如下:

after—是在记录操纵之后触发,是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作
before—是在记录操纵之前触发,是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作,如:我们在触发之前需要判断new值和old值的大小或关系,如果满足要求就触发,不通过就修改再触发;如:表之间定义的有外键,在删除主键时,必须要先删除外键表,这时就有先后之分,这里before相当于设置了断点,我们可以处理删除外键。


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(80) 打赏



未经允许不得转载:搜云库技术团队 » 数据库中触发器before与after认识

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367