SQLITE:提交后检查约束的事务
我目前正在处理一个sqlite表,我必须执行以下操作:SQLITE:提交后检查约束的事务,sql,sqlite,transactions,constraints,Sql,Sqlite,Transactions,Constraints,我目前正在处理一个sqlite表,我必须执行以下操作: ID | Name | SortHint ---|-------|--------- 0 | A | 1 1 | B | 2 2 | C | 3 ID是主键,SortHint是带有唯一性-constant的列。我要做的是修改表,例如: ID | Name | SortHint ---|-------|--------- 0 | A | 3 1 | B |
ID | Name | SortHint
---|-------|---------
0 | A | 1
1 | B | 2
2 | C | 3
ID
是主键,SortHint
是带有唯一性
-constant的列。我要做的是修改表,例如:
ID | Name | SortHint
---|-------|---------
0 | A | 3
1 | B | 1
2 | C | 2
问题是:由于的唯一性
我不能简单地更新一行又一行。我试过:
BEGIN TRANSACTION;
UPDATE MyTable SET SortHint = 3 WHERE ID= 0;
...
COMMIT;
但是第一次更新查询立即失败,原因是:
UNIQUE constraint failed: MyTable.SortHint Unable to fetch row
那么,有没有一种方法可以“禁用”事务的唯一约束,并且只在事务提交后检查所有约束
注意事项:
- 我不能修改这个表
- 如果我只使用表中不存在的
值,它就可以工作SortHint
- 我知道如何“解决”这个问题,但我想知道是否有如上所述的方法来解决这个问题
- 一种可能是删除唯一约束,然后再次添加它。不过这有点贵
另一种方法是将值设置为负值:
UPDATE MyTable
SET SortHInt = - SortHint;
UPDATE MyTable
SET SortHint = 3
WHERE ID = 0;
. . .
如果无法修改表,则无法删除约束。 解决方法是将SortHint更改为未使用的范围。 例如,您可以将10000个项目添加到所有项目中。犯罪 然后立即换到现在免费的号码。 也许之后再测试,不存在10000或更高的数字 可能重复的