轉載自: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索引
- 副本集
- 聚焦分析
- 事務管理
- 寫關注
- 讀關注