SQLite как обновить столбец, который принадлежит многоколоночному индексу

#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