mysql - 为什么我们需要 SQL 的游标?

标签 mysql sql database

图像有两个表:

Table_1:
id | name | phone
---| ---- | ----
1  | aaaa | 1111
2  | bbbb | 2222
3  | cccc | 3333
...| ...  | ...

Table_2 who is empty now:
id | name | phone
---| ---- | ----

如果你想从table_1中选择一些行并将它们插入到table_2中,我们可以这样做(第一种方式):

insert into table_2
  select * from table_1 where name='aaaa';

简单易行!只有一行代码,但是使用 cursor 我们需要几行代码(第二种方式使用 MySQL 的语法):

DECLARE done INT DEFAULT 0;  
DECLARE id int(3);  
DECLARE name char(11);  
DECLARE phone char(11);  
DECLARE mycur CURSOR FOR SELECT * FROM Table_1 where name='aaaa';  
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  

OPEN mycur;  

REPEAT  
FETCH mycur INTO id,name,phone;  
IF NOT done THEN  
  INSERT INTO Table_2 VALUES (id,name,phone);  
END IF;    
UNTIL done END REPEAT;

CLOSE mycur;  

我的意思是,在普通的 producer 中,我们可以只使用第一种方法来处理没有游标的结果集吗? 我们什么时候才真正需要游标??

最佳答案

在无法使用 SQL 语句的地方需要使用游标,大多数情况下用于数据操作以外的操作。例如-

  • 查看表格列表并对每个表格进行操作,例如收集统计数据/添加/删除分区。
  • 查看客户列表并为每个客户发送邮件/生成发票

附言

无法通过 SQL 语句(有效地)操作数据并且需要游标的情况非常、非常、非常少见,尤其是当数据库支持分析功能时。

关于mysql - 为什么我们需要 SQL 的游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40230595/

相关文章:

mysql - 表中不存在键列 'courseid'

python - MySQL 查询抛出 1064 错误

MySQL 将多个表(外键)的数据组合成一个数组

database - Laravel 5,使用字段和列的 orderByRaw 不存在

sql - 存储过程的模式?

php - 如何在 wp_posts 表中手动插入带有 html 代码的字符串

mysql - 因诺数据库 : Operating system error number 1117 in a file operation

MYSQL根据JOIN中的ID选择最新结果以防止重复

mysql - 如何使用逗号分隔值的交集进行选择?

java - 在一个 Firebase 数据库中使用两种不同的结构