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 表名 删除表中数据是正常的。
请牛人给我解释一下到底是怎么回事,尤其是前两点。多谢了。 展开
2、在1的基础之上,我重启了oracle SQL*PLUS,然后在其中查询1中删掉的表中内容,却可以查询的到删前表中的数据(但是明明在1中已经删掉了,并且我也没有做回滚的操作啊),怎么回事?
3、我又在oracle SQL*PLUS中用了truncate table 表名 删除表中数据是正常的。
请牛人给我解释一下到底是怎么回事,尤其是前两点。多谢了。 展开
展开全部
1、oracle 如果使用同一个终端,比如sql*plus ,如果进行了 delete 操作,但是没有commit; 那么在同一个终端是可以看到delete 已经被操作的结果。 但是其他的终端却看不到这个执行结果。就像jdbc 仍然能够查询到数据。
2、你把 sql*plus 重启之后 就不是以前那个终端了。所以就又不能看到以前操作的结果了。所以就可以看到以前被删除的数据了。
3、truncate table 是物理操作,不需要commit。 所以你在哪里看到的都是一致的数据。但是他却不能回滚。
希望对你有帮助。
2、你把 sql*plus 重启之后 就不是以前那个终端了。所以就又不能看到以前操作的结果了。所以就可以看到以前被删除的数据了。
3、truncate table 是物理操作,不需要commit。 所以你在哪里看到的都是一致的数据。但是他却不能回滚。
希望对你有帮助。
展开全部
你在sqlplus上 用delete 删除表 应该没有 commit,所以 其他session查询的仍然是 原来数据。
delete是DML语句,要有commit。
清空表 用truncate 无需commit
delete是DML语句,要有commit。
清空表 用truncate 无需commit
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我好像也遇到这样类似问题,好像是查询表时没有数据,然后在java中插入数据时,说之前删除的数据还在,不让插入,后来我看了user_tables视图的num_rows字段还真不是0,后来用语句analyze table 表名 compute statistics,num_rows字段变为0了,重启java项目的服务就好了,不知道对你的情况有帮助么,只能这样了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-15
展开全部
delete 会在内存中 标记为删除,commit后才会写入数据库!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询