Добавить ненулевой столбец DateTime в SQLite без значения по умолчанию? - PullRequest
6 голосов
/ 12 июня 2010

Похоже, я не могу добавить ненулевое ограничение или удалить ограничение по умолчанию.Я хотел бы добавить столбец datetime в таблицу, чтобы все значения были установлены на что угодно (возможно, 1970 или 2000 год), но кажется, что я не могу использовать не нуль без значения по умолчанию, и я не могу удалить значение по умолчанию после добавления. Так какя могу добавить этот столбец?(еще раз просто обычное время, а не ноль)

1 Ответ

14 голосов
/ 12 июня 2010

Вместо использования ALTER TABLE ADD COLUMN создайте новую таблицу с дополнительным столбцом и скопируйте старые данные. Это освободит вас от ограничений ALTER TABLE и позволит установить ограничение NOT NULL без значения по умолчанию.

ALTER TABLE YourTable RENAME TO OldTable;
CREATE TABLE YourTable (/* old cols */, NewColumn DATETIME NOT NULL);
INSERT INTO YourTable SELECT *, '2000-01-01 00:00:00' FROM OldTable;
DROP TABLE OldTable;

Редактировать: Официальная документация SQLite для ALTER TABLE теперь предостерегает от вышеуказанной процедуры, поскольку она «может повредить ссылки на эту таблицу в триггерах, представлениях и ограничениях внешнего ключа». Безопасной альтернативой является использование временного имени для таблицы new , например:

CREATE TABLE NewTable (/* old cols */, NewColumn DATETIME NOT NULL);
INSERT INTO NewTable SELECT *, '2000-01-01 00:00:00' FROM YourTable;
DROP TABLE YourTable;
ALTER TABLE NewTable RENAME TO YourTable;
...