0
图片有两个表:为什么我们需要SQL的游标?
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
,可我们只是用它来处理结果集的第一种方式没有光标? 什么时候我们真的需要一个光标?
使用游标时,无论你试图做什么变得如此复杂,你举起你的手,并愿意说:“是的,我不在乎它是如何发生的,多慢,甚至1000倍慢得多呃完成” – Drew
@Drew您能否给我解释一下答案中的更多细节,或许是一些例子,谢谢〜 – KaKa
也许如果你面对一些棘手的问题时会更容易回答,而且如果没有游标。这是在sql开发初期的一种常见感觉,其中思维是面向程序思维,我的方式,我的for循环与集合和关系以及sql引擎工作的快速方式。所以sql建立在一个拐杖(游标)。当你在旅途中继续前行时,你会找到方法来执行你的任务,这是引擎优化的目标。游标就像非常缓慢。 – Drew