Я могу найти синтаксис "диаграммы" на этом сайте SQLite, но примеров нет, и мой код дает сбой. У меня есть другие таблицы с уникальными ограничениями на один столбец, но я хочу добавить ограничение на таблицу на два столбца. Это то, что у меня вызывает SQLiteException с сообщением «синтаксическая ошибка».
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Я делаю это на основании следующего:
Чтобы быть понятным, в документации по предоставленной мной ссылке написано, что она CONTSTRAINT name
должна предшествовать определению моего ограничения.
Что-то, что может привести к решению, состоит в том, что то, что следует за моими определениями столбцов в скобках, является тем, на что жалуется отладчик.
Если я поставлю
...last_column_name last_col_datatype) CONSTRAINT ...
ошибка рядом с "CONSTRAINT": синтаксическая ошибка
Если я поставлю
...last_column_name last_col_datatype) UNIQUE ...
ошибка рядом с "UNIQUE": синтаксическая ошибка
источник
Ответы:
Поместите объявление UNIQUE в раздел определения столбца; рабочий пример:
источник
ON CONFLICT IGNORE
(еще не пробовал заменить) более чем с 2 столбцами, но я не вижу, чтобы он соблюдал уникальное ограничение, он просто весело добавляет дубликаты.ON CONFLICT REPLACE
его, возможно, не то, что вам нужно - он удаляет уже существующие строки, чтобы можно было вставить новую строку. Обычно я хотел бы прервать или откатить нарушение ограничения. Предложение SQLite ON CONFLICTНу, ваш синтаксис не соответствует ссылке, которую вы включили, которая указывает:
источник
Будьте внимательны при определении таблицы, так как при вставке вы получите разные результаты. Рассмотрим следующее
Хотя эффект вставки / обновления одинаков,
id
изменения основаны на типе определения таблицы (см. Вторую таблицу, в которой теперь есть «Алиса»id = 4
; первая таблица делает больше того, что я ожидаю, оставьте PRIMARY KEY таким же ). Помните об этом эффекте.источник
Если у вас уже есть таблица и вы не можете / не хотите ее воссоздать по какой-либо причине, используйте индексы :
источник