MySQL中的游标是一种可滚动的结果集,允许用户在结果集中导航,并对其中某些行进行更新、删除等操作。
在MySQL中使用游标需要以下步骤:
- 声明游标:
sql
DECLARE cursor_name CURSOR FOR SELECT ...
- 打开游标:
sql
OPEN cursor_name;
- 根据需求获取行:
- FETCH NEXT:获取下一行
- FETCH PRIOR:获取前一行
- FETCH FIRST:获取第一行
- FETCH LAST:获取最后一行
- FETCH ABSOLUTE n:获取第n行
- FETCH RELATIVE n:获取相对当前行的第n行
sql
FETCH NEXT FROM cursor_name;
- 对行进行操作(更新、删除等)
- 关闭游标:
sql
CLOSE cursor_name;
例1:使用游标遍历users表,并删除age>30的用户。
sql
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(20),
age INT
);
INSERT INTO users VALUES(1, 'John', 32), (2, 'May', 20), (3, 'Michael', 40);
DECLARE cursor_users CURSOR FOR SELECT * FROM users;
OPEN cursor_users;
DELETE_loop: LOOP
FETCH NEXT FROM cursor_users INTO @id, @name, @age;
IF @age > 30 THEN
DELETE FROM users WHERE id = @id;
END IF;
END LOOP delete_loop;
CLOSE cursor_users;
游标的主要功能:
- 遍历查询结果集:可以使用不同的FETCH操作遍历结果集中各行数据。
- positionable:可以自由滚动到结果集中的任意行。
- 用于DELETE,UPDATE等操作:可以在遍历结果集过程中进行删除、更新操作。
- 避免锁表:使用游标可以只锁定当前操作行,避免锁定整张表。
游标可以看做是MySQL中实现可滚动结果集和行级锁定的一种手段,它的应用场景比较专业,需要对MySQL有比较深入的理解才可以熟练使用。