你提到的 “Cursor游标如何更新数据”,通常指 数据库中的游标(Cursor) 用于逐行查询并更新的场景。下面以常见数据库为例说明。
游标允许你:
⚠️ 注意:
游标更新通常只能在 可更新游标(Updatable Cursor) 上使用。
DECLARE cur CURSOR FOR
SELECT id, name, age
FROM users
WHERE age < 18
FOR UPDATE OF age;
OPEN cur;
FETCH NEXT FROM cur INTO @id, @name, @age;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE users
SET age = @age + 1
WHERE CURRENT OF cur; -- 关键:更新当前游标行
FETCH NEXT FROM cur INTO @id, @name, @age;
END;
CLOSE cur;
DEALLOCATE cur;
✅ WHERE CURRENT OF cur 表示只更新游标当前指向的行
MySQL 游标本身不能直接 UPDATE 当前行,通常用变量 + 条件更新:
DECLARE done INT DEFAULT FALSE;
DECLARE v_id INT;
DECLARE cur CURSOR FOR SELECT id FROM users WHERE age < 18;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO v_id;
IF done THEN LEAVE read_loop; END IF;
UPDATE users SET age = age + 1 WHERE id = v_id;
END LOOP;
CLOSE cur;
DECLARE
CURSOR cur IS
SELECT age FROM users WHERE age < 18 FOR UPDATE;
BEGIN
FOR rec IN cur LOOP
UPDATE users
SET age = rec.age + 1
WHERE CURRENT OF cur;
END LOOP;
END;
❌ 不能在以下情况更新:
✅ 建议:
UPDATE ... WHERE 就别用游标如果你说的是:
那是不能直接更新数据的,只能通过:
UPDATE table SET ... WHERE id = cursor_id;
如果你能告诉我:
我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。