【发布时间】:2012-07-15 14:58:28
【问题描述】:
我有这个带有值的表:
val
1
2
3
7
8
9
该表还有一个 id 列,目前不相关。
我想插入一个值,但规则是不能有任何重复值。假设我插入了一个新的 2,当前的 2 应该变成 3,依此类推,直到值 3,这将变成 4。在这种情况下,值 7、8 和 9 不需要'移动'。
我正在使用 SQLite。在所需的新值持有者被“移动”后,插入或更新部分可以在单独的查询中完成。
到目前为止,我正在这样做:
//being n my new value.
UPDATE values SET val = val+1 WHERE val >= n
但这也会修改7,8和9,不需要修改。
对如何解决这部分问题有任何想法吗?将更新限制为仅连续值?
在一个查询中进行整个插入/更新的更好方法也将不胜感激。
【问题讨论】:
-
您也可以在删除像
UPDATE values SET val = val-1 WHERE val >= n这样的单行时重新编号。这样,您将始终拥有连续的数字,并且可以再次使用UPDATE values SET val = val+1 WHERE val >= n。不是最佳的,但可以工作。 -
感谢您的想法,但不连续性的来源是用户。此值用作优先级,用户可以重新分配任务的优先级,并为其分配一个随机优先级,范围为 1 到 20。
-
如果
val列有一个实际的UNIQUE约束,那么您可能需要UPDATE ... ORDER BY,遗憾的是默认情况下它没有编译为SQLite。 sqlite.org/lang_update.html