仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 882|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL教程之游标、游标的长处和品种

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你不用花费很多时间和金钱来培训现有的职工,或者去花大价钱雇用那些拥有各种证书的开发者。因为MySQL的维护和管理在很大程度上是“傻瓜型”的。本章前半部分供应了在MSSQLSERVER中使用游标所应具有的有关游标的需要常识和各类语法。从中读者能够懂得游标的长处、品种、感化、学会怎样界说、翻开、存取、封闭、开释游标和游标的使用。除此以外,在本章的后半部分我们先容了视图和用户自界说函数,使读者懂得视图的浩瀚长处,好比简化操纵、进步数据平安性;懂得怎样创立、办理视图和用户自界说函数;懂得怎样在存储历程和批处置中挪用用户自界说函数等诸多成绩。

在数据库开辟过程当中,当你检索的数据只是一笔记录时,你所编写的事件语句代码常常利用SELECTINSERT语句。可是我们经常会碰到如许情形,即从某一了局会合一一地读取一笔记录。那末怎样办理这类成绩呢?游标为我们供应了一种极其优异的办理计划。

13.1.1游标和游标的长处
在数据库中,游标是一个非常主要的观点。游标供应了一种对从表中检索出的数据举行操纵的天真手腕,就实质而言,游标实践上是一种能从包含多条数据纪录的了局会合每次提取一笔记录的机制。游标老是与一条T_SQL选择语句相干联由于游标由了局集(能够是零条、一条或由相干的选择语句检索出的多笔记录)和了局会合指向特定纪录的游标地位构成。当决意对了局集举行处置时,必需声明一个指向该了局集的游标。假如已经用C言语写过对文件举行处置的程序,那末游标就像您翻开文件所失掉的文件句柄一样,只需文件翻开乐成,该文件句柄便可代表该文件。关于游标而言,其事理是不异的。可见游标可以完成按与传统程序读取立体文件相似的体例处置来自基本表的了局集,从而把表中数据以立体文件的情势出现给程序。

我们晓得干系数据库办理体系本色是面向汇合的,在MSSQLSERVER中并没有一种形貌表中单一纪录的表达情势,除非利用where子句来限定只要一笔记录被选中。因而我们必需借助于游标来举行面向单笔记录的数据处置。
因而可知,游标同意使用程序对查询语句select前往的行了局会合每行举行不异或分歧的操纵,而不是一次对全部了局集举行统一种操纵;它还供应对基于游标地位而对表中数据举行删除或更新的才能;并且,恰是游标把作为面向汇合的数据库办理体系和面向行的程序计划二者接洽起来,使两个数据处置体例可以举行相同。

13.1.2游标品种
MSSQLSERVER撑持三品种型的游标:Transact_SQL游标,API服务器游标和客户游标。
(1)Transact_SQL游标
Transact_SQL游标是由DECLARECURSOR语法界说、次要用在Transact_SQL剧本、存储历程和触发器中。Transact_SQL游标次要用在服务器上,由从客户端发送给服务器的Transact_SQL语句或是批处置、存储历程、触发器中的Transact_SQL举行办理。Transact_SQL游标不撑持提取数据块或多行数据。
(2)API游标
API游标撑持在OLEDB,ODBC和DB_library中利用游标函数,次要用在服务器上。每次客户端使用程序挪用API游标函数,MSSQLSEVER的OLEDB供应者、ODBC驱动器或DB_library的静态链接库(DLL)城市将这些客户哀求传送给服务器以对API游标举行处置。
(3)客户游标
客户游标次要是当在客户机上缓存了局集时才利用。在客户游标中,有一个缺省的了局集被用来在客户机上缓存全部了局集。客户游标仅撑持静态游标而非静态游标。因为服务器游标其实不撑持一切的Transact-SQL语句或批处置,以是客户游标经常仅被用作服务器游标的帮助。由于在一样平常情形下,服务器游标能撑持尽年夜多半的游标操纵。
因为API游标和Transact-SQL游标利用在服务器端,以是被称为服务器游标,也被称为背景游标,而客户端游标被称为前台游标。在本章中我们次要报告服务器(背景)游标。由于MySQL数据库已经如此普及,对企业来说它无疑是一个更好的选择。
兰色精灵 该用户已被删除
沙发
发表于 2015-1-19 11:13:18 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
深爱那片海 该用户已被删除
板凳
发表于 2015-1-25 08:39:33 来自手机 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
逍遥一派 该用户已被删除
地板
 楼主| 发表于 2015-2-2 18:30:07 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
小魔女 该用户已被删除
5#
发表于 2015-2-8 04:14:25 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
分手快乐 该用户已被删除
6#
发表于 2015-2-24 05:51:50 | 只看该作者
无法深入到数据库系统层面去了解和探究
老尸 该用户已被删除
7#
发表于 2015-3-7 11:34:37 | 只看该作者
如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.
若相依 该用户已被删除
8#
发表于 2015-3-15 03:13:12 | 只看该作者
大家注意一点。如下面的例子:
因胸联盟 该用户已被删除
9#
发表于 2015-3-21 17:15:57 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表