MySQL之InnoDB触发器

短命女 2022-06-04 01:10 481阅读 0赞

对触发器的支持,使的InnoDB也具有了商业数据库的功能

下面给出一个简单的事例,该例针对insert语句,将触发器和表关联起来。其作用相当于累加器,能够将插入表中一列的值累加起来。

1.建一张表

  1. mysql> create table account (acct_num int,amount decimal(10,2));
  2. Query OK, 0 rows affected (0.03 sec)

2.为该表创建一个触发器

  1. mysql> create trigger ins_sum before insert on account for each row set @sum=@sum+new.amount;
  2. Query OK, 0 rows affected (0.02 sec)

create triggery语句创建了与账户表相关的,名为ins_sum的触发程序。

它还包括一些子句,这些子句指定了触发程序激活的时间、触发程序时间、以及触发程序时要做什么。

关键字before指明了触发程序的动作时间。在本例中,将在每一行插入表之前激活触发程序。

如果需要在事件发生后激活触发程序,则需要指定关键字after。

关键字insert指明了激活触发程序的事件。本例中,insert语句将导致触发程序的激活。同样也可以为delete和update语句创建触发程序。

on account 为哪一张表,跟在for each row 后面的语句定义了每次激活程序时将要执行的程序,对于受触发语句影响的每一行执行一次。

本例中,触发的语句是简单的set语句,负责将插入amount列的值累加起来。该语句将列引用为new.amount,意思是“将要插入到新行的amount列的值”。

要想使用触发程序,将累加器变量设置为0,执行insert语句,然后查看变量的值,语句如下。

  1. mysql> set @sum=0;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql> insert into account values(137,14.98),(141,1937.50),(97,-100.00);
  4. Query OK, 3 rows affected (0.02 sec)
  5. Records: 3 Duplicates: 0 Warnings: 0
  6. mysql> select @sum as 'total amount inserted';
  7. +-----------------------+
  8. | total amount inserted |
  9. +-----------------------+
  10. | 1852.48 |
  11. +-----------------------+
  12. 1 row in set (0.00 sec)

3.想要销毁触发程序,可使用drop trigger语句

  1. mysql> drop trigger test.ins_sum;
  2. Query OK, 0 rows affected (0.00 sec)

注1:decimal

首先,对于精度比较高的东西,比如money,我会用decimal类型,不会考虑float,double,因为他们容易产生误差,numeric和decimal同义,numeric将自动转成decimal。

DECIMAL从MySQL 5.1引入,列的声明语法是DECIMAL(M,D)。在MySQL 5.1中,参量的取值范围如下:

M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。

D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。

说明:float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。

如DECIMAL(5,2) 的最大值为9 9 9 9 . 9 9,因为有7 个字节可用。

本文主要参考了MySQL DBA 修炼之道一书中对触发器的介绍

发表评论

表情:
评论列表 (有 0 条评论,481人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL触发器

    使用触发器可以定制用户对表进行【增、删、改】操作时前后的行为,注意:没有查询。 一、创建触发器 插入前 CREATE TRIGGER tri_befo

    相关 MYSQL触发器

    在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中,我们在添加一条新商品记录的

    相关 MySQLInnoDB触发器

    对触发器的支持,使的InnoDB也具有了商业数据库的功能 下面给出一个简单的事例,该例针对insert语句,将触发器和表关联起来。其作用相当于累加器,能够将插入表中一列的值累

    相关 Mysql触发器Trigger

    一、什么是触发器    简单来说就是当某个表发生某些操作(插入、删除、更新)时,自动触发预先编译好的多条sql语句 二、创建触发器    模式如:create trigg

    相关 MySQL触发器

    一:什么是触发器? 触发器是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要调用使用CALL语句来调用,也不需要手工启动,只要当一个预定