当前位置:网站首页 > 技术博客 > 正文

mysql触发器菜鸟教程



DEFINER:定义该触发器的用户和主机地址,一般默认为当前用户和主机地址。
trigger_name:触发器名称 AFTER|BEFORE:触发器触发状态,二选一。
INSERT|UPDATE|DELETE:触发器触发状态,三选一。
table_name:监控的数据表名称。
FOR EACH ROW:行级触发器,修改一行数据触发一次。不写就默认语句级触发器,不管修改多少行数据,只执行一次。

 

命令行方式

 

before触发器一般用于在操作数据前,对新数据的值进行修改。例如:考试时长计算,set new.考试时长 = new endtime - new starttime(很少使用)

 

1.new.字段的值可以在before类型的触发器中进行赋值和取值,在after类型触发器中只能取值。(在after类型触发器中进行对new数据行赋值操作会报错。因为after是在操作之后,已经产生了新数据行,不可修改。)
2.在insert操作中,只有new数据行,没有old数据行。(使用old关键字会报错)
3.在update操作中,new数据行和old数据行存在。
4.在delete操作中,只有old数据行。(使用new关键字会报错)
5.在mysql5.7之前的版本,同一张表中,不能存在两个类型一样的触发器。如果想在一个触发器种实现两种不同的处理语句执行,可以增加条件判断。
例如:使用if语句

 

或使用case when语句

 

6.在mysql5.7之后的版本可以存在两个类型的触发器。在这里插入图片描述
但是要注意主键策略问题,两个触发器执行语句都为新增,当新增数据表的某列为主键时,第二次插入同样的数据就会报错。id为6的新数据不能插入bysj_dt表两次。
在这里插入图片描述
7.在mysql中,只存在6种触发器。(before insert、before update、before delete、after insert、after update、after delete)
8.查看所有触发器:show triggers;

版权声明


相关文章:

  • 字符串函数strcat2025-01-02 12:30:03
  • textview hint2025-01-02 12:30:03
  • mininet的常用命令2025-01-02 12:30:03
  • mysql5.7和8.0的区别2025-01-02 12:30:03
  • 动态路由配置2025-01-02 12:30:03
  • 背包问题例题讲解2025-01-02 12:30:03
  • 班智达藏文输入键盘图片2025-01-02 12:30:03
  • swing javafx2025-01-02 12:30:03
  • 关系数据库服务rds能够满足游戏行业多变的需求2025-01-02 12:30:03
  • autoit3 教程2025-01-02 12:30:03