Oracle数据库里面有DCL语句(Data Control Language),一共有四个关键字,commit、rollback、grant和revoke。它们执行的时候,你都不会有什么感觉。commit在数据库编程的时候很常用,当你执行DML操作时,数据库并不会立刻修改表中数据,这时你需要commit,数据库中的数据就立刻修改了,如果在没有commit之前,就算你把整个表中数据都删了,如果rollback的话,数据依然能够还原。
听我这么说,你或许感觉commit没什么用,其实不然。当你同时执行两条或两条以上的sql语句时,问题就出现了。举一个例子,你去银行转账,你转的时候银行的数据库会update你银行账户里面的数据,同时对另一个人得账户也进行update操作。这两个程序都必须全部正确执行,才能commit,否则rollback。
如果只是完成一条,要么你郁闷,要么银行郁闷,第一种情况是,你的账户的钱没少,转账人得账户上的钱多了,银行郁闷了。第二种情况你的银行账户的钱少了,他的却没多,你就好郁闷了。Oracle好好学吧!sql不难,plsql努努力也能熬过去,等到优化那,哎!DBA不是那么好当的。
还有就是commit算是显式提交,还有隐式提交,并不是,不commit的话,你的全部努力就都白费了。
不会,问题是一步一步解决的。理出头绪了,物体就解决了。
追答 : oracle中sqlplus下执行sql语句,是不是只要没有commit就没有把实际修改结果存入数据库啊?
Oracle
按理说(书上说的),如果我在一个用户下update了表,但没有commit的时候,用另一个用户登录查看该表应该是没有修改前的。
但是我试了一下,怎么和书说的不一样呢,看见的是改后的。哦,我装的是11g版本。
在一个用户下update了表,但没有commit的时候,
用另一个用户登录查看该表应该是没有修改前的
注意上面写的,用另一个用户登录
估计你是update后,直接又运行select了吧
在同一个窗口,运行的sql是属于同一个事务的,所以虽然没有提交,但是看见了也是改后的数据。
sqlplus连接oracle后执行语句,结果都是2??
SQL> select * from
2
是不是这样子啊 ,是因为你没有输入完整的sql,输入完成后要加;才能执行
例如:
SQL> select * from
2 dual
3 ;
回车就可了
。
全部