Изменение уникального поля таблицы - PullRequest
3 голосов
/ 14 сентября 2010

У меня есть таблица, в которой есть уникальный ключ с двумя ограничениями.Я хочу изменить таблицу так, чтобы я мог удалить одно из ограничений в уникальном поле.

Моя текущая схема БД:

CREATE TABLE testtable(test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,UNIQUE (test1,test2))

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

Я хочу, чтобы моя схема базы данных была такой после обновления.

CREATE TABLE testtable(test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,UNIQUE (test1))

1 Ответ

7 голосов
/ 14 сентября 2010

В других СУБД вы бы использовали ALTER TABLE DROP CONSTRAINT ....Однако sqlite поддерживает только варианты RENAME TABLE и ADD COLUMN команды ALTER TABLE ( Source ).

Поэтому, боюсь, вам придется создать новую таблицу:

CREATE TABLE testtable2(
   test1 TEXT, test2 TEXT, test3 TEXT, test4 TEXT DEFAULT FALSE,
   UNIQUE (test1)
);

Затем вставьте данные из старой таблицы в новую таблицу:

INSERT INTO testtable2 SELECT * FROM testtable;

Затем вы можете удалить старую таблицу:

DROP TABLE testtable;

Инаконец, переименуйте новую таблицу в исходное имя:

ALTER TABLE testtable2 RENAME TO testtable;

ОБНОВЛЕНИЕ:

Будьте осторожны, чтобы ваше новое ограничение было менее допустимым.Например, если в исходной таблице были следующие строки:

test1       test2       test3       test4     
----------  ----------  ----------  ----------
a           a           100         1         
a           b           200         2         
a           c           300         3         

Тогда INSERT INTO testtable2 SELECT * FROM testtable; завершится ошибкой, поскольку test1 не является уникальным:

SQL error: column test1 is not unique
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...