在非键属性上更新行时,键是不唯一的?

时间:2012-02-07 17:30:29

标签: sqlite primary-key

我对一个小型数据库有一个非常奇怪的问题。 该表有大约400个条目,键是两列,包含两个md5哈希。 我的表看起来像这样:

create table if not exists documents (id NOT NULL, pid NOT NULL, path NOT NULL, title, version, author, department, retention DEFAULT 3, date,comment TEXT,PRIMARY KEY(id, pid));

现在我有数据库中的这一行数据:

sqlite> select oid,* from documents where oid = 11;
rowid|id|pid|path|title|version|author|department|retention|date|comment|publisher|record|recordretention|indoklenk
11|7408cf58dbf8985d8532b719edcd08b8|98b482dc01793d0dafa02a644fc425bd|Path\To\A\File|Checkliste.doc||||3|2012-01-23||Foobar||3|1

现在我想改变一些东西,给他OID在哪里:

sqlite> update documents set indoklenk = 0 where oid = 11;
Error: columns id, pid are not unique

为什么我会收到此错误消息?我从来没有换过任何钥匙?此外,我没有任何碰撞......有些条目具有相同的id,但pid总是不同。

改变oid上的东西是不是一个坏主意?我从未听过有关它的坏事......

编辑:即使我通过

更改它
update documents set indoklenk = 0 where id = '7408cf58dbf8985d8532b719edcd08b8' and pid = '98b482dc01793d0dafa02a644fc425bd';
它不起作用!我得到同样的错误......那里发生了什么?为什么我无法更改数据?

1 个答案:

答案 0 :(得分:0)

经过对代码的大量研究后我发现错误不是来自我更新的表,而是来自第二个表的日志消息。在此表中,主键未设置为正确,因此如果我在文档表中更新,则可能是发生双重消息...

先检查你的触发器;)