#sqlite #indexing
#sqlite #индексирование
Вопрос:
Допустим, у меня есть индекс (идентификатор, имя) и я хочу выполнить запрос типа:
update <table> set name='new name' where name='old name'
Затем я получил ошибку типа:
Query Error: columns id, name are not unique Unable to fetch row.
Что это за ошибка? И как я могу обновить этот столбец без получения ошибки?
Ответ №1:
Было бы полезно, если бы вы могли показать содержимое <table>
, по крайней мере, всех строк с name = 'new name'
или name = 'old name'
.
Однако наиболее логичным предположением является то, что в вашей таблице уже существуют две одинаковые строки id
, одна из которых имеет значение 'new name'
, а другая имеет значение 'old name'
в name
поле. Если это верно, и вы запустите это, UPDATE
тогда результаты будут нарушать любой PRIMARY KEY
или UNIQUE
индекс для этой комбинации полей.
Комментарии:
1. вы правы. Я не понял, что «идентификатор столбцов, имя не уникальны» означают, что они не уникальны в этой таблице.
Ответ №2:
Похоже, что в sqlite WHERE
предложение должно возвращать одну уникальную строку.
Измените свой SQL на:
update <table> set name='new name' where id='id' and name='old name'
Комментарии:
1. Я не уверен, что понимаю ваш ответ. Я не уверен, насколько полезной была бы база данных, если бы она разрешала запросы, возвращающие только одну строку. Я не думаю, что это проблема здесь.
Ответ №3:
Сообщение об ошибке трудно понять.
Более подробно это может сказать:
Query Error: columns id, name would be not unique after the update operation