我目前正在使用sqlite表,我必须执行以下操作:
ID | Name | SortHint
---|-------|---------
0 | A | 1
1 | B | 2
2 | C | 3
ID
是主键,SortHint
是UNIQUE
- 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
值答案 0 :(得分:0)
一种可能性是删除唯一约束,然后再次添加。但这有点贵。
另一种方法是将值设置为负值:
UPDATE MyTable
SET SortHInt = - SortHint;
UPDATE MyTable
SET SortHint = 3
WHERE ID = 0;
. . .
答案 1 :(得分:0)
如果无法修改表格,则无法删除约束。 解决方法可能是将SortHint更改为未使用的范围。 例如,您可以为所有这些添加10,000。承诺。 然后立即更改为正确的数字,现在已经免费。 也许之后测试不再存在10,000或更高的数字。