首先我自己说一点体会:
在客户端PowerBuilder程序中有语句:
if dw_1.update()=1 then
messagebox()
commit ;
end if
和下面的语句进行比较:
if dw_1.update()=1 then
commit ;
messagebox()
end if
在update后事务已经开始,先提交后提示和先提示后提交是有区别的。
在客户端PowerBuilder程序中有语句:
if dw_1.update()=1 then
messagebox()
commit ;
end if
和下面的语句进行比较:
if dw_1.update()=1 then
commit ;
messagebox()
end if
在update后事务已经开始,先提交后提示和先提示后提交是有区别的。
一般这样用UPDATE()
if dw_1.update(true,false)=1 then
...
else
...
end if2:
sybase的触发器不是非常的稳定
我以前就遇到过,一个INSERT触发器,系统运行一段时间(3-4个月)后,变成了任意
时机都触发的怪物('for insert'丢了重新生成也不行,怪事)
)
messagebox实际是个使程序停止的窗口,不按其上面的按钮程序就不继续,数据没有提交,事务没有完成,库当然要暂时锁住,所以messagebox要放在commit的后面。
一个程序同时运行在多台机器上时,必须考虑人为在程序中设置读锁或写锁,因为有的人开开程序就忙别的去了,从而导致或者打开的数据别人在别的机器上就修改不了,或者别人修改的数据在这个人的屏幕上就不能体现,这就要加上定时刷新的功能,并合理选择锁的方式。
1、事务不能太大尽量缩微短事务,一个大的事务最好分几次提交。
2、要选择合适的index,尽量减少表扫描,但index 不能太多否则影响insert和update 操作。(保持index的最佳选取)
3、利用存储过程。
4、建立临时表。
5、对一个大表(公共表)一次性insert,或update几千行数据时一定要减少插入或更新的字段数。并减少这种操作。
1、2基本这样,
4不太现实,但也没有什么体会。
3反而增加了服务器负担,也增加了死锁的可能性,应该把尽量多的事情移到客户端。
5好象不对,SYBASE数据行的改变是先删除后添加,因此字段树多少应该没有关系,我认为应该
把多行记录分多次提交,但没有做过。
Transaction1:
If update table1 success
Then
update table2
End if
Transaction2:
If update table2 success
Then
update table1
End if
这种情况在多客户机时,非常容易产生死锁,这在任何数据库系统均是一样的。
而MessageBox放在Commit,Rollback之前或之后,很显然应放在MessageBox之前,因为放在后面,事务处理不应该由操作员控制。很经典的例子,放在前面,用户做出选择之前,出去了一个小时,其他用户怎么办?
他们有可能同时提交数据或同时都不提交数据。