oracle删除表中全部数据的问题

1、我在oracleSQL*PLUS中用了deletefrom表名;可以正常删掉,重新查询结果为空(证明确实删掉了),然而我在java程序中用jdbc访问数据库,查到的却... 1、我在oracle SQL*PLUS中用了delete from 表名;可以正常删掉,重新查询结果为空(证明确实删掉了),然而我在java程序中用jdbc访问数据库,查到的却是删除之前的表中数据。这两种结果矛盾是怎么回事?

2、在1的基础之上,我重启了oracle SQL*PLUS,然后在其中查询1中删掉的表中内容,却可以查询的到删前表中的数据(但是明明在1中已经删掉了,并且我也没有做回滚的操作啊),怎么回事?
3、我又在oracle SQL*PLUS中用了truncate table 表名 删除表中数据是正常的。

请牛人给我解释一下到底是怎么回事,尤其是前两点。多谢了。
展开
 我来答
sunguangshou
推荐于2017-09-05 · TA获得超过151个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:80.4万
展开全部
1、oracle 如果使用同一个终端,比如sql*plus ,如果进行了 delete 操作,但是没有commit; 那么在同一个终端是可以看到delete 已经被操作的结果。 但是其他的终端却看不到这个执行结果。就像jdbc 仍然能够查询到数据。
2、你把 sql*plus 重启之后 就不是以前那个终端了。所以就又不能看到以前操作的结果了。所以就可以看到以前被删除的数据了。
3、truncate table 是物理操作,不需要commit。 所以你在哪里看到的都是一致的数据。但是他却不能回滚。

希望对你有帮助。
AWPLP
2013-10-15 · TA获得超过752个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:153万
展开全部
你在sqlplus上 用delete 删除表 应该没有 commit,所以 其他session查询的仍然是 原来数据。
delete是DML语句,要有commit。
清空表 用truncate 无需commit
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qianlidongqll
2013-10-15 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:80
采纳率:50%
帮助的人:52万
展开全部
我好像也遇到这样类似问题,好像是查询表时没有数据,然后在java中插入数据时,说之前删除的数据还在,不让插入,后来我看了user_tables视图的num_rows字段还真不是0,后来用语句analyze table 表名 compute statistics,num_rows字段变为0了,重启java项目的服务就好了,不知道对你的情况有帮助么,只能这样了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-15
展开全部
delete 会在内存中 标记为删除,commit后才会写入数据库!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式