什么时候用commit和rollback呢。
我一般连接数据库时都将Antocommit设置为False
但我在程序里和后台数据库交互时好像很少用到commit和rollback 语句呀。
哪位兄弟能帮我解释解释他们的作用以及在什么时候用的上呢?
------解决方案--------------------
这里主要提到事务的概念,有一个典型的例子,银行转帐,
a帐户转100到b帐户,需要执行两条语名
update account set n_money=n_money-100 where id='a'
update account set n_money=n_money+100 where id='b'
两条语句必须不可分隔必须同时成功或同时失败的,这样就需要写成;
update account set n_money=n_money-100 where id='a'
if sqlca.sqlcode=0 then
update account set n_money=n_money+100 where id='b'
if sqlca.sqlcode=0 then
commit Using sqlca;
messagebox('','OK!')
else
messagebox('err','e2')
end if
else
messagebox('err','e1')
end if
------解决方案--------------------
事务可以理解为不可分隔的一系列原子操作的集合
如果你平常没写commit,autocommit=false,那样的话一般在你断开数据库的时候数据才会提交
------解决方案--------------------
呵呵,为了抢沙发,刚else里面还要加上rollback using sqlca;
------解决方案--------------------
如果没有commit,你所有的修改都是针对你当前连接数据库的这个会话的,修改都会放在数据库的内存中,不会真正写到数据库中,
你可以做一个实验,两个一样的程序,autocommit设置为false,都不使用commit,两个程序都打开运行,第一个程序修改一个数据,第二个程序点检索,在第一个程序中,数据是已经改了的,重新点检索也可以看到修改后的数据,第二个程序中看不到的,要等第一个程序退出后才看得到,因为在关闭会话时自动提交了
------解决方案--------------------
------解决方案--------------------
autocommit = false 时,
当有对数据库表更新的时候,数据库会锁表,在有明确的 commit 或 rollback 之后才解锁.