一个困扰我很久的问题,今天终于忍受不了了 我使用pl/sql的时候,修改或删除数据,为什么总是感觉没删掉,删掉后再查询还是有刚才的记录,非要commit才行,有没有办法彻底解决这个问题呢,我对oracle不熟悉,不过我觉得oracle很麻烦,没有中文文档,不是一般人用的,请不是一般人回答,谢谢忘记了,没有分了,不好意思 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 肯定得commit才行,这个是oracle数据库为安全方面考虑的。 .....记住commit就行了,不用困扰了. commit和rollback是用来结束一个事务的,你做的操作创建了一个事务,只有结束事务,也就是提交,才是操作完成。 首先一个事务,必须提交(commit)后才可以反映到数据库中。事务提交分为显式提交和隐式提交两种显式提交就是使用commit命令进行提交隐式提交则为执行ddl语句,正常退出客户端等等。其次没有commit也能查询到数据有几种可能:1. 你在sqlplus中insert into,然后在同一个session里面查询,这个是可以查询到的。但是其他用户通过其他客户端连到oracle,是查询不到的,如果你没有commit的话。2. 你在sqlplus中insert into,然后关闭sqlplus,sqlplus初始设置是在关闭sqlplus时自动commit的。3. 即使你是通过odbc,oci或者其他工具,也许都会有自动commit选项设置(在关闭连接或者退出工具时) 必须用commit才能真正提交否则如果设计成直接提交 那么rollback就没用了 你在当前session中,用DML修改删除数据后,可以看到更改后的结果,但是数据库中实际数据并没有被更改,只是放到了回滚段中,其它session查询时仍然是你修改前的数据,只有提交了,数据库中实际数据才真正修改了,其它session也就可以查询到你更改后的结果。用DDL操作数据库直接提交,不可回滚。 你在输入命令? set会出现set命令帮助 看看那个set命令是将自动提交设置打开 也就是将其设置为true以后你每一次操作就自动提交了 你在输入命令? set会出现set命令帮助 看看那个set命令是将自动提交设置打开 也就是将其设置为true以后你每一次操作就自动提交了 设置成autocommit on就不用自己去commit了.但是这样对DB也很危险 在pl/sql下输入:set autocommit on就不用自己去commit了. 但是这样对DB也很危险设置回来:set autocommit off 字段名中包含特殊字符,应该如何处理 动态SQL拼接 字符集的苦恼,软件开发高手请进 toad for oracle 求大神解答 如何控制job,在执行中遇到错误时就停止而不要反复执行?? 关于多表联合查询的问题 sqlplus问题 不同数据库之间表转移 哪里有比较完整的sql server与oracle的sql语法比较? Oracle数据库权限收集问题 关于oracle自动备份的问题 获取当天是星期几的问题?
事务提交分为显式提交和隐式提交两种
显式提交就是使用commit命令进行提交
隐式提交则为执行ddl语句,正常退出客户端等等。
其次没有commit也能查询到数据有几种可能:
1. 你在sqlplus中insert into,然后在同一个session里面查询,这个是可以查询到的。但是其他用户通过其他客户端连到oracle,是查询不到的,如果你没有commit的话。2. 你在sqlplus中insert into,然后关闭sqlplus,sqlplus初始设置是在关闭sqlplus时自动commit的。
3. 即使你是通过odbc,oci或者其他工具,也许都会有自动commit选项设置(在关闭连接或者退出工具时)
才能真正提交
否则如果设计成直接提交 那么rollback就没用了
用DDL操作数据库直接提交,不可回滚。
? set
会出现set命令帮助 看看那个set命令是将自动提交设置打开 也就是将其设置为true以后你每一次操作就自动提交了
? set
会出现set命令帮助 看看那个set命令是将自动提交设置打开 也就是将其设置为true以后你每一次操作就自动提交了
但是这样对DB也很危险
就不用自己去commit了.
但是这样对DB也很危险
设置回来:set autocommit off