SQLITE:提交后检查约束的事务

时间:2016-02-14 13:14:29

标签: sql sqlite transactions constraints

我目前正在使用sqlite表,我必须执行以下操作:

ID | Name  | SortHint
---|-------|---------
 0 |   A   |    1
 1 |   B   |    2
 2 |   C   |    3

ID是主键,SortHintUNIQUE - constaint的列。我要做的是修改表格,例如:

ID | Name  | SortHint
---|-------|---------
 0 |   A   |    3
 1 |   B   |    1
 2 |   C   |    2

问题:由于UNIQUE我不能简单地更新一行。我试过了:

BEGIN TRANSACTION;
UPDATE MyTable SET SortHint = 3 WHERE ID= 0;
...
COMMIT;

但是第一次更新查询无法通过以下方式失败:

UNIQUE constraint failed: MyTable.SortHint Unable to fetch row

那么,有没有办法去禁止"事务的唯一constaint,并且只在提交事务后才检查所有事务?

备注:

  • 我无法修改表格
  • 如果我只使用表中尚未包含的SortHint
  • ,则可以使用
  • 我知道如何"解决方法"这个问题,但我想知道是否有办法如上所述

2 个答案:

答案 0 :(得分:0)

一种可能性是删除唯一约束,然后再次添加。但这有点贵。

另一种方法是将值设置为负值:

UPDATE MyTable
    SET SortHInt = - SortHint;

UPDATE MyTable
    SET SortHint = 3
    WHERE ID = 0;

. . .

答案 1 :(得分:0)

如果无法修改表格,则无法删除约束。 解决方法可能是将SortHint更改为未使用的范围。 例如,您可以为所有这些添加10,000。承诺。 然后立即更改为正确的数字,现在已经免费。 也许之后测试不再存在10,000或更高的数字。