【发布时间】:2013-10-15 12:32:56
【问题描述】:
因此,我在 SQLite 3 中有一个表:
sqlite> .schema
CREATE TABLE table1 (id INTEGER PRIMARY KEY NOT NULL,
title TEXT UNIQUE NOT NULL,
priority INTEGER UNIQUE NOT NULL);
这里是一些示例数据,用于说明:
sqlite> SELECT * FROM table1;
id title priority
---------- ---------- ----------
1 a 1
2 b 2
3 c 3
4 d 4
我希望在priority > 1 的所有单元格的priority 上加1。这是我的第一次尝试:
sqlite> UPDATE table1 SET priority = priority + 1 WHERE priority > 1;
Error: column priority is not unique
这失败了,可能是因为更新没有排序,允许更新尝试将priority 列中的一个单元格设置为现有单元格的值。所以,这是我的第二次尝试:
sqlite> UPDATE table1 SET priority = priority + 1 WHERE priority > 1
ORDER BY priority DESC;
Error: near "ORDER": syntax error
这也失败了,大概是因为我安装的 SQLite 3 没有使用 SQLITE_ENABLE_UPDATE_DELETE_LIMIT 选项编译。
因为我可能最终想在 Android 上将我的 SQL 语句与 SQLite 一起使用,而后者也 does not 启用了 SQLITE_ENABLE_UPDATE_DELETE_LIMIT,所以我最好找到另一种方法来实现我的目标,而不是使用 SQLITE_ENABLE_UPDATE_DELETE_LIMIT 重新编译 SQLite 3启用。那么,这是我的第三次尝试:
sqlite> BEGIN TRANSACTION;
UPDATE table1 SET priority = priority + 1 WHERE priority > 1;
END TRANSACTION;
Error: column priority is not unique
这也失败了,大概是因为 SQLite 在提交事务之前检查了唯一性约束。
3 次失败的尝试,但我确信这是可能的。问题是:怎么做;在此范围内,如何做到最好?
注意我不想依赖任何未经检查的假设。
【问题讨论】:
标签: sql sqlite android-sqlite