Mysql官网知识总结

触发器(trigger)

使用触发器官网讲解
触发器语法和示例

CREATE TRIGGER ins_sum BEFORE INSERT ON account
       FOR EACH ROW SET @sum = @sum + NEW.amount;

1.关键字BEFORE和AFTER表示触发动作的时间。BEFORE在插入表中的每一行之前激活
2.FOR EACH ROW定义触发器主体;每当触发触发器时执行的语句,对于受触发事件影响的没一行都会发生一次。

SET @sum = 0;
mysql> INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
mysql> SELECT @sum AS 'Total amount inserted';
+-----------------------+
| Total amount inserted |
+-----------------------+
|               1852.48 |
+-----------------------+``

销毁触发器,请使用DROP TRIGGER语句

mysql> DROP TRIGGER test.ins_sum;
使用FOLLOWS,新触发器将在现有触发器之后激活。使用PRECEDES,新触发器将在现有触发器之前激活。默认情况下,具有触发事件和动作时间的触发器

 CREATE TRIGGER ins_transaction BEFORE INSERT ON account
       FOR EACH ROW PRECEDES ins_sum
       SET
       @deposits = @deposits + IF(NEW.amount>0,NEW.amount,0),
       @withdrawals = @withdrawals + IF(NEW.amount<0,-NEW.amount,0);

IF(NEW.amount<0,-NEW.amount,0)为三元表达式
new和old的使用
在insert trigger中只能使用new,不能使用old。在delete trigger中只能使用old。在update trigger中old表示更新之后的值,new表示更新之前的值。old的值不能修改,在before trigger中new可以更改值,比如:SET NEW.col_name = value,但是在after trigger中就不能使用set来修改值了。
procedure语句
分别定义存储过程,然后使用简单的CALL语句从触发器调用存储过程会更容易 。如果要在多个触发器中执行相同的代码,这也将非常有利。
实践遇到的问题

聚合函数

having和group by的使用
where:在分组之前过滤
group by:按照某个字段或者某些字段进行分组
having:对分组之后的数据进行再次过滤
having是group by 的搭档,没有group by的话,having是不能使用的
分组函数一般都会和group by联合使用
任何一个分组函数(count,min,max,avg,sum)都是在group by语句执行之后才会执行
当一条sql语句没有group by的话,整张的结构会成一组
group by 是在where语句执行之后才会执行,所以where后面不能使用分组函数

or和and的用法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值