转载自:https://www.jb51.net/article/70677.htm
****
**1. 什么是光标(游标)**
查询语句可能会有多条记录,在存储过程或函数中使用光标可以逐条获取结果集中的记录。
<br/>
**2. 光标的使用步骤**
```sql
1. 声明光标
# 光标必须声明在处理程序之前,在变量和条件之后
DECLARE cursor_name CURSOR FOR select_statement;
2. 打开光标
OPEN cursor_name;
3. 使用光标
FETCH cursor_name INTO var_name[, var_name, ...];
4. 关闭光标
# 每个光标不再需要时应该关闭,以便释放光标所占的资源
# 对于声明过的光标不需要再次声明,直接用open打开即可使用
CLOSE cursor_name;
- cursor_name:自定义的光标名称
- select_statement:select 查询语句
- var_name:select 语句查询出来的信息存入该变量中,该变量必须在声明光标之前定义好
```
**3. 演示**
将表`account`的数据复制一份到表`account_copy`中。
```sql
# 1. 数据准备
drop table if exists account;
create table account
(
id int primary key auto_increment not null,
username varchar(255) not null,
password varchar(255) not null
);
insert into account values(1, '张三', 'zhangsan');
insert into account values(2, '李四', 'lisi');
drop table if exists account_copy;
create table account_copy
(
id int primary key auto_increment not null,
uname varchar(255) not null,
pass varchar(255) not null
);
# 2. 在存储过程中使用光标
delimiter $
create procedure proce_cur()
begin
declare id_ int(11);
declare count_ int(11);
declare uname_ varchar(255);
declare pass_ varchar(255);
-- 声明光标
declare cursor_account cursor for select * from account;
declare continue handler for sqlstate '02000' set @info = 'ERROR';
select count(id) into count_ from account;
-- 打开光标
open cursor_account;
repeat
-- 使用光标,将光标中的值赋值给下面三个变量
fetch cursor_account into id_, uname_, pass_;
insert into account_copy values(id_, uname_, pass_);
set count_ = count_ - 1;
until count_ <= 0
end repeat;
-- 关闭光标
close cursor_account;
end $
# 3. 调用存储过程
call proce_cur() $
# 4. 查看结果
mysql> select * from account_copy $
+----+--------+----------+
| id | uname | pass |
+----+--------+----------+
| 1 | 张三 | zhangsan |
| 2 | 李四 | lisi |
+----+--------+----------+
```
- MySQL
- MySQL是什么
- MySQL环境搭建
- centos7-MySQL8
- windows-MySQL8
- 数据库软件
- sqlyog软件安装
- navicat软件安装
- powerDesigner软件安装
- RDBMS术语
- SQL语句组成
- 数据库系统组成
- 数据库操作
- 数据表操作
- 查询语句
- 基本语法
- 子查询
- 表连接
- 查询语句执行顺序
- 事务
- 事务是什么
- 事务的作用
- 事务的4个特性
- 事务隔离级别
- 事务的实现
- 索引
- 索引的作用
- 索引操作
- 存储引擎
- 备份与恢复
- 视图
- 视图是什么
- 视图的作用
- 创建视图
- 查看视图
- 更改视图
- DML操作视图
- 删除视图
- 存储过程与函数
- 过程与函数是什么
- 存储过程操作
- 定义存储过程
- 调用存储过程
- 查看存储过程
- 删除存储过程
- 修改存储过程
- 函数操作
- 过程与函数区别
- 流程控制
- if语句
- case语句
- while循环语句
- repeat循环语句
- loop循环语句
- 变量
- 处理程序
- 光标
- Redis
- 简介
- 下载与安装
- 命令操作redis数据库
- 通用命令
- 数据操作
- 持久化
- Windows上的持久化操作
- 数据库设计
- 数据库设计过程
- ER模型图
- MongoDB
- MongoDB是什么?
- MongoDB特性
- MongoDB 数据模型
- 安装MongoDB
- MongoDB认证
- Database操作
- Collection操作
- Document操作
- 插入
- 查询
- 更新
- 删除
- buckWrite
- MongoDB索引
- 副本集
- 聚焦分析
- 事务管理
- 写关注
- 读关注