SQLITE:提交后检查约束的事务
SQLITE: Transaction to check constraints after commit
我目前正在开发一个 sqlite table,我必须在其中执行以下操作:
ID | Name | SortHint
---|-------|---------
0 | A | 1
1 | B | 2
2 | C | 3
ID
是主键,SortHint
是具有 UNIQUE
-constaint 的列。我要做的就是修改table,例如:
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
那么,有没有办法 "disable" 事务的唯一约束,并且只在事务提交后才检查所有约束?
备注:
- 我无法修改table
- 如果我只使用 table
中不存在的 SortHint
值,它会起作用
- 我知道如何"workaround"这个问题,但我想知道是否有如上所述的方法
一种可能是删除唯一约束,然后重新添加。不过有点贵。
另一种方法是将值设置为负值:
UPDATE MyTable
SET SortHInt = - SortHint;
UPDATE MyTable
SET SortHint = 3
WHERE ID = 0;
. . .
如果您无法修改 table,则无法删除约束。
解决方法是将 SortHint 更改为未使用的范围。
例如,您可以将 10,000 添加到所有这些。犯罪。
然后立即更改为现在免费的正确号码。
也许之后再测试 10,000 或更高的数字不再存在。
我目前正在开发一个 sqlite table,我必须在其中执行以下操作:
ID | Name | SortHint
---|-------|---------
0 | A | 1
1 | B | 2
2 | C | 3
ID
是主键,SortHint
是具有 UNIQUE
-constaint 的列。我要做的就是修改table,例如:
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
那么,有没有办法 "disable" 事务的唯一约束,并且只在事务提交后才检查所有约束?
备注:
- 我无法修改table
- 如果我只使用 table 中不存在的
- 我知道如何"workaround"这个问题,但我想知道是否有如上所述的方法
SortHint
值,它会起作用
一种可能是删除唯一约束,然后重新添加。不过有点贵。
另一种方法是将值设置为负值:
UPDATE MyTable
SET SortHInt = - SortHint;
UPDATE MyTable
SET SortHint = 3
WHERE ID = 0;
. . .
如果您无法修改 table,则无法删除约束。 解决方法是将 SortHint 更改为未使用的范围。 例如,您可以将 10,000 添加到所有这些。犯罪。 然后立即更改为现在免费的正确号码。 也许之后再测试 10,000 或更高的数字不再存在。