SQL基础-游标&事务

一、游标

1、游标简介

SQL是一种集合操作语言,但有时候需要对单行操作怎么办呢?
也就是有时候会过滤出不止一行的数据,但是想一行行的处理;

---游标


游标:
    从集合中依次提取单条记录,直接提取完最后一条;
    类似于指针的作用;
    尽管游标能遍历结果中的所有行,但一次只指向一行;


游标的适用场景:
    存储过程
    函数
    触发器



游标的使用步骤:
  定义游标
    DECLARE 游标名称 CURSOR FOR SELECT子句;
  打开游标
    OPEN 游标名称
  使用游标
    FETCH 游标名称 INTO 变量名1,变量名2,变量名3[,…]
  关闭游标
    CLOSE 游标名称


2、游标使用的示例

##配合存储过程使用

CREATE PROCEDURE cursor_student()
BEGIN
  DECLARE v_student_id varchar(50); 
  DECLARE v_student_name varchar(100); 
  DECLARE done INT DEFAULT false; 

  DECLARE mycursor CURSOR FOR SELECT student_id,student_name FROM student WHERE score >= 90;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;

  OPEN mycursor;

  FETCH mycursor INTO v_student_id,v_student_name; 

  WHILE(NOT done) 
  DO 
    SELECT v_student_id,v_student_name;
    FETCH mycursor INTO v_student_id,v_student_name; 
  END WHILE; 

  CLOSE mycursor;
END;


3、游标的优缺点

优点:
    提供了一种除集合操作外的行操作方式;

缺点:
    性能一般,数据量比较大的时候,还可能会造成内存不足;


二、事务

1、事务简介

事务是一种处理机制,它保证了要执行的一组操作,要么全部执行成功,要么全部执行不成功。

事务用来管理INSERT、UPDATE、DELETE语句。

在MySQL中,只有使用了Innodb存储引擎的数据库或表才支持事务。



事务的四个特性(ACID):
  原子性(Atomicity)
    要执行的一组操作,要么全部执行成功,要么全部执行不成功。如果中间一个操作执行失败,则前面已经执行成功的语句也会被回退。

   一致性(Consistency)
    事务开始前和执行后,并没有破坏数据的完整性。

   隔离性(Isolation)
    多个事务之间是相互隔离的,不会相互影响。

  持久性(Durability)
    事务执行结束后,数据就被永久保存在了数据库中,即使数据库出错、重启,数据也不会丢失。



事务控制:
    开始一个新事务:BEGIN。
    回滚当前事务:ROLLBACK。
    提交当前事务:COMMIT
posted @ 2019-09-02 16:04  米兰的小铁將  阅读(536)  评论(0编辑  收藏  举报