Я могу найти синтаксические "диаграммы" на этом на веб-сайте 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 в раздел определения столбца:
CREATE TABLE name (column defs, UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE);
Рабочий пример:
CREATE TABLE a (i INT, j INT, UNIQUE(i, j) ON CONFLICT REPLACE);
ON CONFLICT IGNORE
(еще не пробовал заменить) с более чем 2 столбцами, но я не вижу, чтобы он соблюдал уникальное ограничение, он просто весело добавляет дубликаты.
Ну, ваш синтаксис не соответствует указанной вами ссылке, которая указывает:
CREATE TABLE name (column defs)
CONSTRAINT constraint_name -- This is new
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE