ключ не уникален, при обновлении строки по неключевому атрибуту? - PullRequest
0 голосов
/ 07 февраля 2012

У меня действительно странная проблема с маленькой базой данных. таблица содержит около 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? Я никогда не слышал ничего плохого об этом ...

edit: даже если я изменю его на

update documents set indoklenk = 0 where id = '7408cf58dbf8985d8532b719edcd08b8' and pid = '98b482dc01793d0dafa02a644fc425bd';

это не работает! я получаю ту же ошибку ... что там происходит? Почему я не могу изменить данные?

1 Ответ

0 голосов
/ 12 марта 2012

После долгих исследований в коде я обнаружил, что ошибка не в таблице, которую я обновляю, а во второй таблице, записывается сообщение журнала.В этой таблице первичные ключи не были установлены правильно, поэтому, если я обновлю в таблице документов, может произойти двойное сообщение ...

сначала проверьте ваш триггер;)

...