求教怎么用游标来查询mysql数据库所有表的记录数

求教怎么用游标来查询mysql数据库所有表的记录数,第1张

试试这个方法:

use information_schema;

select table_name,table_rows from tables

where TABLE_SCHEMA = 'testdb'

order by table_rows desc;

在数据库中,游标提供了一种对从表中检索出的数据进行 *** 作的灵活手段。就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。

游标总是与一条SQL

选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。

游标关于数据库中的 *** 作会对整个行集产生影响。由SELECT语句返回的行集包括所有满足该语句WHERE子句中条件的行。由语句所返回的这一完整的行集被称为结果集。

应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的结果集扩展。

扩展资料:

游标通过以下方式扩展结果处理:

1允许定位在结果集的特定行。

2从结果集的当前位置检索一行或多行。

3支持对结果集中当前位置的行进行数据修改。

4为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。

5提供脚本、存储过程和触发器中使用的访问结果集中的数据的Transact-SQL语句。

据我理解,游标并不太占资源。就fetch一条

如果你做处理的时候,怕影响其他用户读数据,你可以分批处理,比如说处理这个月的数据。

如果不影响其他用户,反正是所有的处理都一次完成,只是你的方法比较复杂。

游标(cursor)也被称为游标。Oracle 使用两种游标:显示游标和隐式游标。不管语句返回多少条纪录, PL/SQL 为使用的每一条 UPDATE 、 DELETE 和 INSERT 等 SQL 命令隐式的声明一个游标。

当你在一个文本框或某种程式中输入文字时,总有一个游标来显示你将要输入文字的位置。现在大部分的游标都为一个小竖线,规则的闪动而在DOS下有些游标则是短短的小横线,同样规则的闪动现用的windows游标是一个图像,可以是动态的也可以是静态的,在不同情况下样子也不同。

基本介绍 中文名 :游标 外文名 :cursor 别名 :游标 分类 :显示游标和隐式游标 所属类别 :计算机 用途 :输入文字 计算机术语,资料库中的游标,使用游标的基本方法,声明游标,打开游标,从游标中取回数据,关闭游标, 计算机术语 当你在一个文本框或某种程式中输入文字时,总有一个游标来显示你将要输入文字的位置。 现在大部分的游标都为一个小竖线,规则的闪动而在DOS下有些游标则是短短的小横线,同样规则的闪动现用的windows游标是一个图像,可以是动态的也可以是静态的,在不同情况下样子也不同。 资料库中的游标 (要管理 SQL 语句的处理,必须隐式的给它定义一个游标。)用户声明并使用显示游标处理 SELECT 语句返回的多条记录。显示的定义游标是一种结构,它使用户能够为特定的语句指定记忆体区域,以便以后使用。 当 PL/SQL 游标查询返回多行数据时,这些记录组被称为活动集。 Oracle 将这种活动集存储在您创建的显示定义的已命名的游标中。Oracle 游标是一种用于轻松的处理多行数据的机制,没有游标, Oracle 开发人员必须单独地、显示地取回并管理游标查询选择的每一条记录。游标的另一项功能事,它包含一个跟踪当前访问的记录的指针,这使您的程式能够一次处理多条记录。 使用游标的基本方法 声明游标 声明游标的语法如下: DECLARE cursor_name Is SELECT statement 其中, cursor_name 是您给游标指定的名称; SELECT statement 是给游标活动集返回记录的查询。 声明游标完成了下面两个目的: 给游标命名;将一个查询与游标关联起来。值得注意的是,必须在 PL/SQL 块的声明部分声明游标;给游标指定的名称是一个未声明的标识符,而不是一个 PL/SQL 变数,不能给游标名称赋值,也不能将它用在表达式中。 PL/SQL 块使用这个名称来引用游标查询。 例: DECLARE CURSOR c1 Is SELECT VIEW_NAME FROM ALL_VIEWS WHERE ROWNUM<=10 ; 另外还可以在游标定义语句中声明游标的参数,例: CURSOR c1 ( view _nbr number ) Is SELECT VIEW_NAME FROM ALL_VIEWS WHERE ROWNUM<= view _nbr ; 游标参数只对相应的游标是可见的,不能在游标范围之外引用该游标的参数。如果试图这样做, Oracle 将返回一个错误,指出该变数没有定义。 打开游标 打开游标的语法如下: OPEN cursor_name ; 其中 cursor_name 是您以前定义的游标名称。 打开游标将激活查询并识别活动集,可是在执行游标取回命令之前,并没有真正取回记录。 OPEN 命令还初始化了游标指针,使其指向活动集的第一条记录。游标被打开后,直到关闭之前,取回到活动集的所有数据都是静态的,换句话说,游标忽略所有在游标打开之后,对数据执行的 SQL DML 命令( INSERT 、 UPDATE 、 DELETE 和 SELECT )。因此只有在需要时才打开它,要刷新活动集,只需关闭并重新打开游标即可。 从游标中取回数据 FETCH 命令以每次一条记录的方式取回活动集中的记录。通常将 FETCH 命令和某种叠代处理结合起来使用,在叠代处理中, FETCH 命令每执行一次,游标前进到活动集的下一条记录。 FETCH 命令的语法: FETCH cursor_name INTO record_list ; 其中, cursor_name 是前面定义的游标的名称; record_list 是变数列表,它接受活动集中的列。 FETCH 命令将活动集的结果放置到这些变数中。 执行 FETCH 命令后,活动集中的结果被取回到 PL/SQL 变数中,以便在 PL/SQL 块中使用。每取回一条记录,游标的指针就移向活动集的下一条记录。 例: FETCH C1 INTO VNAME; WHILE C1%FOUND LOOP DBMS_OUTPUTPUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME); END LOOP; 关闭游标 CLOSE 语句关闭以前打开的游标,使得活动集不确定。当用户的程式或会话结束时, Oracle 隐式关闭游标。游标被关闭后,就不能对它执行任何 *** 作了 , 否则将引发异常。 CLOSE 语句的语法是: CLOSE cursor_name ; 其中, cursor_name 是以前打开的游标的名称。 完整的程式代码如下: DECLARE CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS WHERE ROWNUM<=10 ORDER BY VIEW_NAME; VNAME VARCHAR2(40); BEGIN OPEN C1; FETCH C1 INTO VNAME; WHILE C1%FOUND LOOP DBMS_OUTPUTPUT_LINE(TO_CHAR(C1%ROWCOUNT)||''||VNAME); END LOOP; END; …… CLOSE C1;

游标在处理数据中提供了在结果集中一次一行或者多行前进或向后浏览数据的能力,可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。

游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标可以被看作是一个查询结果集和结果集中指向特定记录的游标位置组成的一个临时文件,提供了在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。

有了游标,用户就可以访问结果集中任意一行数据,在将游标放置到某行之后,可以在该行或从该位置的行块上执行 *** 作。

扩展资料

游标的类型

MS SQL SERVER 支持三种类型的游标:Transact_SQL 游标,API服务器游标和客户游标。

1、Transact_SQL 游标

Transact_SQL 游标由DECLARE CURSOR 语法定义、主要用在Transact_SQL脚本、存储过程和触发器中。Transact_SQL 游标主要用在服务器上,由从客户端发送给服务器的Transact_SQL 语句或是批处理、存储过程、触发器中的Transact_SQL 进行管理。

2、API游标

API 游标支持在OLE DB, ODBC 以及DB_library 中使用游标函数,主要用在服务器上。每一次客户端应用程序调用API 游标函数,MS SQL SEVER 的OLE DB 提供者、ODBC驱动器或DB_library 的动态链接库都会将这些客户请求传送给服务器以对API游标进行处理。

3、客户游标

客户游标主要是当在客户机上缓存结果集时才使用。在客户游标中,有一个缺省的结果集被用来在客户机上缓存整个结果集。客户游标仅支持静态游标而非动态游标。由于API 游标和Transact-SQL 游标使用在服务器端,所以被称为服务器游标,也被称为后台游标,而客户端游标被称为前台游标。

参考资料来源:百度百科—游标

declare @id int\x0d\declare @name varchar(50)\x0d\declare cursor1 cursor for --定义游标cursor1\x0d\select from table1 --使用游标的对象(跟据需要填入select文)\x0d\open cursor1 --打开游标\x0d\fetch next from cursor1 into @id,@name --将游标向下移1行,获取的数据放入之前定义的变量@id,@name中\x0d\while @@fetch_status=0 --判断是否成功获取数据\x0d\begin\x0d\update table1 set name=name+'1'\x0d\where id=@id --进行相应处理(跟据需要填入SQL文)\x0d\fetch next from cursor1 into @id,@name --将游标向下移1行\x0d\end\x0d\close cursor1 --关闭游标\x0d\deallocate cursor1

方法一,游标其实就是一条查询语句,直接换成COUNT(1)就可以了

方法二,直接遍历游标,就知道了

方法三:好像还有把结果集直接整到一个集合中,然后用集合的API,也一下统计出来了

BULK COLLECT INTO什么的

2游标

游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种 *** 作,然后将 *** 作结果写回数据表中。

游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。主语言是面向记录的,一组主变量一次只能存放一条记录。仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求。嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式。在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的事务语句代码往往使用SELECT INSERT 语句。但是我们常常会遇到这样情况,即从某一结果集中逐一地读取一条记录。那么如何解决这种问题呢?游标为我们提供了一种极为优秀的解决方案。

定义游标

DECLARE cursor_name CURSOR FOR SELECT_statement;

打开游标

OPEN cursor_name;

获取游标。获得多行数据,使用循环语句去执行FETCH

FETCH cursor_name INTO variable list;

关闭游标

CLOSE cursor_name ;

注意:mysql的游标是向前只读的,也就是说,你只能顺序地从开始往后读取结果集,不能从后往前,也不能直接跳到中间的记录

一个例子:把从数据库查询出来的所有name链接起来。

/初始化/ drop procedure if exists useCursor // /建立 存储过程 create / CREATE PROCEDURE useCursor() BEGIN /局部变量的定义 declare/ declare tmpName varchar(20) default '' ; declare allName varchar(255) default '' ; declare cur1 CURSOR FOR SELECT name FROM testlevel ; / mysql 不知道为什么用异常加入判断 ? 此请参考官方文档 20211 光标 光标 这把 游标 异常后 捕捉 并设置 循环使用 变量 tmpname 为 null 跳出循环。 / declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null; /开游标/ OPEN cur1; /游标向下走一步/ FETCH cur1 INTO tmpName; / 循环体 这很明显 把游标查询出的 name 都加起并用 ; 号隔开 / WHILE ( tmpname is not null) DO set tmpName = CONCAT(tmpName ,";") ; set allName = CONCAT(allName ,tmpName) ; /游标向下走一步/ FETCH cur1 INTO tmpName; END WHILE; CLOSE cur1; select allName ;END;//call useCursor()//

3触发器

触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW BEGIN trigger_stmt END;

trigger_name:触发器的名字,我常用的命名规则t_name_tableName_(b|a)(i|u|d),t:触发器标识,name:英文名,tableName:表名,b(BEFORE):标识是触发事件之前,a(AFTER):标识触发事件之后,i(insert):标识insert事件,u(update):标识update事件,d(delete):标识delete事件;

trigger_time:触发时间(BEFORE或AFTER)

trigger_event:事件名(insert或update或delete)

tbl_name:表名(必须是永久性表)

trigger_stmt:执行语句(可以是复合语名),使用别名OLD和NEW,能够引用与触发程序相关的表中的列。

CREATE TRIGGER t22_biBEFORE INSERT ON t22FOR EACH ROWBEGINSET @x = 'Trigger was activated!';SET NEWs1 = 55;END;//

在表t22中,在插入一条数据之前,显示'Trigger was activated!',并且将插入的这条数据的s1值设为55

以上就是关于求教怎么用游标来查询mysql数据库所有表的记录数全部的内容,包括:求教怎么用游标来查询mysql数据库所有表的记录数、sql中的游标是什么怎样用呢(sql游标的作用)、请教大虾们,反复执行同一个游标(cursor),每次从表中取出1000条,直到将表中的数据取完;等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9706688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存