[请教高手]sql游标问题
size=large SQL的游标是不是将从数据库查到的数据放在内存中?
(2) 通过游标进行增加、删除、修改等操作后,这些数据能不能真实影响到数据库?我的意思是,这些操作是否对数据库进行增、删、改?
(3) 如果游标操作[b][i]不能[/i][/b]真实影响到数据库,那么在内存中进行这些操作又有什么意义呢?
[/size]
[b]问题补充:[/b]
补充:
A) SQL的游标是不是对select操作得到的ResultSet进行操作?
B) 得到的ResultSet是在数据库中(也就是在硬盘中)还是在内存中?
[b]问题补充:[/b]
当然, 通过游标进行的增、删、改、查当然能够影响到真实的数据库。这一点你可以联系到视图,唯一的区别是, 视图是表级,而游标是行级
游标是个结果集,是从数据表中提取出来的数据,以临时表的形式存放在内存中
上面是从两位朋友的答复中抽取出来的部分文字。
我也认为通过游标进行的增删改查能真实的影响数据库,要不就这样的操作就真的没有什么意义了。上面的两个答复中提到“视图”、“临时表的形式存放”,我发这个帖发问的最大疑问就是:通过操作这些存放在内存中的临时表数据(“视图”我觉得本质上也是一张临时表),是如何真正去影响数据库(硬盘上的数据)的?如果我没有记错的话,对视图这样的临时表进行操作是不能影响到真实基表的。那么我们通过游标对临时表进行操作,是何时将这些增删改的数据操作同步到数据库的?也就是说是何时将[内存]中的临时表数据关联到[硬盘]上的数据库而实际影响数据库的?
游标是一个对象,能够提供行级的SQL语句控制。可以表示任意合法的SQL SELECT语句。用数据库语言来描述:游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了,将游标放置到某行后,即可对该行数据进行操作,例如提取当前行的数据等。
个人认为, 这东西你可以理解为指针或者引用……
当然, 通过游标进行的增、删、改、查当然能够影响到真实的数据库。这一点你可以联系到视图,唯一的区别是, 视图是表级,而游标是行级
至于第三,……
当然,以上纯属个人理解, 如有不当, 还请高人继续指教
楼主,游标是个结果集,是从数据表中提取出来的数据,以[b][u]临时表[/u][/b]的形式存放在内存中。在[b][u]游标中有个数据指针[/u][/b],在初始状态是指向第一条记录的。利用fetch语句可以[b][u]移动该游标指针,继而对游标中的数据进行各种操作[/u][/b]。
貌似是个很危险的东西,还是在程序中去实现你要做的吧,如果用hibernate的话一些开源的缓存很不错,比如proxool
A) SQL的游标是不是对select操作得到的ResultSet进行操作?
B) 得到的ResultSet是在数据库中(也就是在硬盘中)还是在内存中?
回答A, SQL的游标是对select操作得到的ResultSet进行操作
回答B,游标得到的结果集在内存中
你说的是通过游标,也就是说是利用游标返回的结果进行, 游标归根结底还是一条行级的查询语句,
感觉有点钻牛角尖了……