SQL Anywhere 9和16之间的不同行为

时间:2017-03-16 19:07:09

标签: sybase isolation-level sqlanywhere

我在查找SQL Anywhere 16行为时遇到的问题与Sybase 9相比,它们都具有相同的数据库集作为脏读或 set transaction isolation level 0

即使从Delphi应用程序(使用TAsaSession)或通过SQL_anywhere_XX,我也会遇到相同的行为:

在Sybase 9上,我可以通过两个连接运行

UPDATE associate SET nm_associate = nm_associate + ' Test' WHERE id_associate = 620

最后没有COMMIT;

在Sybase 16上,第一个连接锁定了关联的表,并保留第二个连接,直到COMMIT运行并释放它。

我不确定隔离级别是否与它有任何关系,或者如果它是我需要设置的任何其他东西,所以我可以从9迁移到16而没有这个问题。 谁能帮助我?

2 个答案:

答案 0 :(得分:0)

隔离级别0仅对读取操作有效:它允许您读取属于其他用户的尚未提交的事务的数据。 运行更新时,无论您在会话中将隔离级别设置为什么,都至少将级别1用于更新语句。

答案 1 :(得分:0)

在每个连接上设置chained='On'后问题已解决。

AsaConnection.Connected := True;
vQry.Session := AsaConnection;
vQry.SQL.Text := 'SET OPTION chained=''On''';
vQry.ExecSQL;