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

游标

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

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

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

下面是使用游标的步骤

  • 声明游标 – 在这个过程中你还没有开始检索数据
  • 打开游标以供使用
  • 检索各行
  • 关闭游标,释放游标
DECLARE cs CURSOR
FOR
SELECT *
FROM customers
WHERE cust_email IS NULL;

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

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

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

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

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

CREATE PROCEDURE proce1
()
BEGIN
	DECLARE cur1 CURSOR
	FOR
	SELECT *
	FROM customers
	WHERE cust_id IS NULL tianyoutianyou;
END	

仍然出错

再次更改

delimiter //
CREATE PROCEDURE proce1
()
BEGIN
	DECLARE cur1 CURSOR
	FOR
	SELECT *
	FROM customers
	WHERE cust_id IS NULL;
END	

这次我们成功地声明游标

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

我们再试试

CREATE PROCEDURE proce1()
DECLARE cur1 CURSOR
FOR
SELECT *
FROM customers
WHERE cust_id IS NULL;

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

delimiter //
DECLARE cur2 CURSOR
FOR
SELECT *
FROM orders ;

或者是这样

delimiter //
DECLARE cur2 CURSOR
FOR
SELECT *
FROM orders //

这两种也8行

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

delimiter //
CREATE PROCEDURE proce1()
BEGIN
	DECLARE cur1 CURSOR
	FOR
	SELECT *
	FROM customers
	WHERE cust_id IS NULL;
END 

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

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

触发器

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

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

(0)

相关推荐

  • Mysql中禁用与启动触发器教程【推荐】

    在使用MYSQL过程中,经常会使用到触发器,但是有时使用不当会造成一些麻烦.有没有一种办法可以控制触发器的调用呢? 触发器顾名思义就是数据库在一定的调条件自动调用的SQL语句,触发器拒绝了人工调用的过程,由数据库MYSQL数据库自动的调用,执行更加高效. 如何禁用触发器呢? 1.新建两张表: 表demo_1: CREATE TABLE `demo_1` ( `ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `STUNAME` varchar(3

  • Mysql存储过程循环内嵌套使用游标示例代码

    BEGIN -- 声明变量 DECLARE v_addtime_begin varchar(13); DECLARE v_addtime_end varchar(13); DECLARE v_borrow_id int; DECLARE v_count int; DECLARE s1 int; /** 声明游标,并将查询结果存到游标中 **/ DECLARE c_borrow CURSOR FOR SELECT ID from rocky_borrow WHERE BORROWTYPE = 2

  • MySQL触发器基本用法详解【创建、查看、删除等】

    本文实例讲述了MySQL触发器基本用法.分享给大家供大家参考,具体如下: 一.MySQL触发器创建: 1.MySQL触发器的创建语法: CREATE [DEFINER = { 'user' | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW [trigger_order] trigger_body 2.MySQL创建语法中的关键词解释: 字段 含义 可能的值 DE

  • MySQL触发器概念、原理与用法详解

    本文实例讲述了MySQL触发器概念.原理与用法.分享给大家供大家参考,具体如下: 1.触发器的概念 触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会激活它执行.--百度百科 上面是百度给的触发器的概念,我理解的触发器的概念,就是你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的s

  • mysql的存储过程、游标 、事务实例详解

    mysql的存储过程.游标 .事务实例详解 下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考. 其中,涉及到了存储过程.游标(双层循环).事务. [说明]:代码中的注释只针对当时业务而言,无须理会. 代码如下: DELIMITER $$ DROP PROCEDURE IF EXISTS `transferEmailTempData`$$ CREATE PROCEDURE transferEmailTempData(IN jobId VARCHAR(24)) BEG

  • mysql存储过程中使用游标的实例

    复制代码 代码如下: DELIMITER $$ DROP PROCEDURE IF EXISTS getUserInfo $$ CREATE PROCEDURE getUserInfo(in date_day datetime)-- -- 实例-- MYSQL存储过程名为:getUserInfo-- 参数为:date_day日期格式:2008-03-08--    BEGINdeclare _userName varchar(12); -- 用户名declare _chinese int ; -

  • MySQL使用游标批量处理进行表操作

    一.概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇文章. 理解MySQL变量和条件:http://www.jb51.net/article/81375.htm 理解Mysql prepare预处理语句:http://www.jb51.net/article/81378.htm 理解MySQL存储过程和函数:http://www.jb51.net

  • MySQL存储过程中游标循环的跳出和继续操作示例

    最近遇到这样的问题,在MySQL的存储过程中,游标操作时,需要执行一个conitnue的操作.众所周知,MySQL中的游标循环操作常用的有三种,LOOP,REPEAT,WHILE.三种循环,方式大同小异.以前从没用过,所以记下来,方便以后查阅. 1.REPEAT 复制代码 代码如下: REPEAT     Statements;   UNTIL expression END REPEAT demo DECLARE num INT; DECLARE my_string  VARCHAR(255);

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

    游标 select检索返回的一组行称为结果集,结果集里的行都是根据你输入的sql语句检索出来的,如果不使用游标,你将没有办法得到第一行,前十行或者是下一行 下面是一些常见的游标现象和特性 能够标记游标为只读,是数据能够读取,但不能被更新或者删除 能控制可以执行的定向操作(向前,向后,第一,最后.绝对位置和相对位置等) 能标记某些行为可编辑的,而另一些行为不可编辑的 能规定范围,使游标对创建它的特定请求或者是所有请求可访问 Cursor declarations must appear befor

  • 浅谈MySQL中group_concat()函数的排序方法

    group_concat()函数的参数是可以直接使用order by排序的.666.. 下面通过例子来说明,首先看下面的t1表. 比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高到底排序. 可以这样写: SELECT username,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM t1 GROUP BY username; 效果如下: 以上这篇浅谈MySQL中group_concat()函数的排序方法就

  • MySql中使用正则表达式查询的方法

    正则表达式常用来检索和替换那些符合魔种模式的文本.例如从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些敏感词汇等.Mysql 使用 REGEXP 关键字指定正则表达式的字符匹配模式. 1. 字符 '^' 查询以特定字符或字符串开头的记录 SELECT * FROM user WHERE email REGEXP '^a' 字符 '^' 匹配以特定字符或字符串开头的记录,以上语句查询邮箱以 a 开头的记录 2. 字符 ' 查询以特定字符或字符串结尾的记录 SELECT

  • 详解Mysql中日期比较大小的方法

    假如有个表product有个字段add_time,它的数据类型为datetime,有人可能会这样写sql: 代码如下 select * from product where add_time = '2013-01-12' 对于这种语句,如果你存储的格式是YY-mm-dd是这样的,那么OK,如果你存储的格式是:2013-01-12 23:23:56这种格式你就悲剧了,这是你就可以使用DATE()函数用来返回日期的部分,所以这条sql应该如下处理: 代码如下 select * from produc

  • mysql中写判断语句的方法总结

    mysql中写判断语句的方法: 方法一.CASE函数 case函数语法: CASE condition WHEN value1 THEN returnvalue1 WHEN value2 THEN returnvalue2 WHEN value3 THEN returnvalue3 -- ELSE defaultvalue END 举例: SELECT username,(CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未知' END) as sex

  • MySQL中的游标和绑定变量

    目录 一.MySQL游标简介 二.绑定变量 2.1 绑定变量的优化 2.2 SQL接口的绑定变量 2.3 绑定变量的限制 一.MySQL游标简介 MySQL在服务器端提供只读的.单向的游标,而且只能在存储过程或者更底层的客户端API中使用. 因为MySQL游标中指向的对象都是存储在临时表中而不是实际查询到的数据,所以MySQL游标总是只读的.它可以逐行指向查询结果,然后让程序做进一步的处理.在一个存储过程中,可以有多个游标,也可以在循环中“嵌套”地使用游标. MySQL的游标设计也为粗心的人“准

  • mysql中的load命令使用方法

    使用mysql 中的load 命令,讲txt 文件中的内容加载到数据库表中,例如,创建table,名称是user,一个字段username:当前有db.txt文件,内容是以空格分开的用户名,例如:xiaowang xiaoliu zhangsan 将该文件加载到数据表user中,使用命令即可: 复制代码 代码如下: load data local infile "/home/beaver/db" into table user lines terminated by ' '; 作者 B

  • 关于MySQL中的查询开销查看方法详解

    MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等.

  • django连接Mysql中已有数据库的方法详解

    我的Mysql中已经有了项目需要使用的相关数据库,现在需要通过django来获取Mysql里的数据并使用,下面记录配置django与mysql的连接过程. (此处默认您已经建好了django框架,如果没有准备好django,请参照我本篇文章 https://www.jb51.net/article/249861.htm 首先需要在项目的settings.py文件中配置mysql的连接信息:把之前配置的sqlite配置信息替换.之前默认的数据库配置信息如图,是与sqlite连接的 现在我们需要替换

  • MySql中特殊运算符的使用方法总结

    前言 mysql中有4类运算符,它们是: 算术运算符 比较运算符 逻辑运算符 位操作运算符 这个大家应该都比较熟悉,但本文给大家总结介绍的关于MySql中特殊运算符的相关内容,下面话不多说了,来一起看看详细的介绍吧 1. <=> 安全比较运算符 mysql中任何与NULL做比较都会是NULL,常用来做判断是否是NULL. 当然我也可以采用IS NULL 2. := 赋值的作用 := 和 = 运算符都有赋值的作用,在大部分场景下并无区别,但 := 更为全场景些. = 只有在 set 和updat

随机推荐