MySQL中使用游标触发器的方法

这篇文章主要介绍了MySQL中使用游标-触发器的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

游标

select检索返回的一组行称为结果集,结果集里的行都是根据你输入的sql语句检索出来的,如果不使用游标,你将没有办法得到第一行,前十行或者是下一行

下面是一些常见的游标现象和特性

  • 能够标记游标为只读,是数据能够读取,但不能被更新或者删除
  • 能控制可以执行的定向操作(向前,向后,第一,最后、绝对位置和相对位置等)
  • 能标记某些行为可编辑的,而另一些行为不可编辑的
  • 能规定范围,使游标对创建它的特定请求或者是所有请求可访问
  • Cursor declarations must appear before handler declarations and after
  • variable and condition declarations.
  • 需要注意的是,打开一个游标时,游标并不指向第一条记录,而是指向第一条记录的前边

下面是使用游标的步骤

  • 声明游标 – 在这个过程中你还没有开始检索数据
  • 打开游标以供使用
  • 检索各行
  • 关闭游标,释放游标

?

1

2

3

4

5

DECLARE cs CURSOR

FOR

SELECT *

FROM customers

WHERE cust_email IS NULL;

本以为万事大吉,但却给我报错

MySQL中使用游标触发器的方法

从语法上来看没有什么问题

试着在 cs 前面加上@,运行仍然报错

还有人说游标只能在存储过程中使用,是这样吗?

现在我们来试一试在存储过程中使用游标

?

1

2

3

4

5

6

7

8

9

CREATE PROCEDURE proce1

()

BEGIN

DECLARE cur1 CURSOR

FOR

SELECT *

FROM customers

WHERE cust_id IS NULL tianyoutianyou;

END

仍然出错

再次更改

?

1

2

3

4

5

6

7

8

9

10

delimiter //

CREATE PROCEDURE proce1

()

BEGIN

DECLARE cur1 CURSOR

FOR

SELECT *

FROM customers

WHERE cust_id IS NULL;

END

这次我们成功地声明游标

是不是因为我们修改了分隔符然我们成功地创建游标了呢?

我们再试试

?

1

2

3

4

5

6

CREATE PROCEDURE proce1()

DECLARE cur1 CURSOR

FOR

SELECT *

FROM customers

WHERE cust_id IS NULL;

这样也是错误的,下面再试试不使用存储过程地语句能否成功创建游标

?

1

2

3

4

5

delimiter //

DECLARE cur2 CURSOR

FOR

SELECT *

FROM orders ;

或者是这样

?

1

2

3

4

5

delimiter //

DECLARE cur2 CURSOR

FOR

SELECT *

FROM orders //

这两种也8行

试了这么多次,唯一成功的只有下面这种语句

?

1

2

3

4

5

6

7

8

9

delimiter //

CREATE PROCEDURE proce1()

BEGIN

DECLARE cur1 CURSOR

FOR

SELECT *

FROM customers

WHERE cust_id IS NULL;

END

下面我们用游标来检索数据

很遗憾,MySQL中没有像Oracle中 %ROWTYPE 般的数据类型,我们下面试着使用游标来检索customers表中的某一类数据类型

触发器

触发器时特定的存储过程,在数据库发生特定活动时自动进行,一般来说,约束的处理比触发器更快,因此在可能的时候,应该尽可能地使用约束。

到此这篇关于MySQL中使用游标触发器的方法的文章就介绍到这了,更多相关mysql游标触发器内容请搜索钦钦技术栈以前的文章或继续浏览下面的相关文章希望大家以后多多支持钦钦技术栈!

原文链接:https://blog.csdn.net/weixin_44634406/article/details/113717366

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/9031/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年 8月 5日 10:24:20
下一篇 2022年 8月 5日 10:24:27

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!