Wenqi's Blog

MySQL-SQL之游标,触发器和事务

游标的出现使得对一个查询结果集的每一行结果能够更细粒度的操作,现在MySQL只支持在存储过程中定义存储过程。一个游标的使用过程是这样的:

  • 使用 <declare 游标名 cursor for 查询语句> 定义一个游标
  • 使用 <open 游标名> 打开游标准备使用
  • 使用fetch语句获取结果中的一行结果到变量 <fetch 游标名 into 变量名>
  • 使用 <close 游标名>关闭游标

创建并使用游标

下面是一个通过游标遍历每一行并输出的过程

效果如下,每行都会打印一个结果

创建触发器

创建触发器要指明四点:1)触发器的名字,2)触发器响应的活动(delete,insert,update),3)触发器响应活动的时间(before after),4)触发器关联的表名称
所以触发器的创建格式是:create trigger 触发器名称 触发器时间 触发器响应活动 on 关联表名 for each row begin 处理逻辑 end;
一个实例,比如我在修改一个customer的信息的时候记录下对应的cust_id,cust_name和对方的ip,已经修改的时间到customer_audit表


执行一条update语句修改customers中的值得到

使用事务

使用start transaction;开启事务,根据业务处理判断后选择提交事务commit;或者回滚rollback;,注意默认的mysql是开启自动提交事务的,需要手动设置set autocommit=0关闭事务,可以通过row_count()>0函数获取执行结果是否执行成功,最好在执行完命令后就获取对应的结果值。我们同样可以通过last_insert_id()获取自增的id值。
注意declare声明的局部变量仅使用于存储过程的begin,end块中,并且要在begin开始后就声明所需要的局部变量,不然会报出执行错误,如果想要在存储过程之外使用变量,可以使用以@开头的用户变量,下面是一个使用事务处理的例子。

参考文档

坚持原创技术分享,您的支持将鼓励我继续创作!