Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Remote » 创建 SQL Remote 系统

 

更新冲突

如果共享数据只是为了进行读取,或每一行(由其主键标识)只在一个数据库更新,则不会发生更新冲突。只有数据在多个数据库进行更新时才会发生更新冲突。

要复制 UPDATE 语句,SQL Remote 需要为每行发出一个单独的 UPDATE 语句。这些单行语句可能会由于以下原因之一而失败:

  • 要更新的行在一列或多列中不同   当预期出现的值之一已被其他某用户更改时,会出现更新冲突

    在远程数据库上,无论行中的值是什么,都将发生更新。

    在统一数据库上,SQL Remote 允许进行冲突解决操作。例如,在检测到冲突时,统一数据库可以:

    冲突解决不适用于主键更新

    UPDATE 语句冲突 适用于主键更新。您不应在 SQL Remote 系统中更新主键。必须通过适当的设计将主键冲突排除在系统之外。

  • 要更新的行不存在   每一行均由其主键值标识。如果行已被删除或主键已被另一个用户更改,则无法找到要更新的行。

    在远程数据库上,不会发生更新。

    在统一数据库上,也不会发生更新。

  • 没有主键或唯一约束的表在复制更新的 WHERE 子句中引用所有列   当两个远程数据库对同一行各自进行单独的更新并将更改复制到统一数据库时,将应用第一个到达统一数据库的更改,而不会应用来自第二个数据库的更改。

    这样,数据库将变得不一致。所有复制的表都应具有主键或唯一约束,且约束中的列决不能更新。


更新冲突的缺省解决方法
使用 VERIFY 子句的自定义冲突解决方法
使用触发器的自定义冲突解决方法