3 ответов:
в sqlite нет столбца ALTER.
Я считаю, что ваш единственный вариант:
- переименовать таблицу во временное имя
- создать новую таблицу без ограничения NOT NULL
- скопировать содержимое старой таблицы в новую
- удалить старую таблицу
это другой ответ Stackoverflow подробно объясняет процесс
хотя верно, что столбец is no ALTER, если вы хотите только переименовать столбец, удалить ограничение NOT NULL или изменить тип данных, вы можете использовать следующий набор опасные команды:
PRAGMA writable_schema = 1; UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS'; PRAGMA writable_schema = 0;вам нужно будет либо закрыть и снова открыть соединение, либо очистить базу данных, чтобы перезагрузить изменения в схему.
например:
Y:\> **sqlite3 booktest** SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> **create table BOOKS ( title TEXT NOT NULL, publication_date TEXT NOT NULL);** sqlite> **insert into BOOKS VALUES ("NULLTEST",null);** Error: BOOKS.publication_date may not be NULL sqlite> **PRAGMA writable_schema = 1;** sqlite> **UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';** sqlite> **PRAGMA writable_schema = 0;** sqlite> **.q** Y:\> **sqlite3 booktest** SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> **insert into BOOKS VALUES ("NULLTEST",null);** sqlite> **.q**ссылки Следуйте:
pragma writable_schema
Когда эта ПРАГМА включена, таблицы SQLITE_MASTER, в которых база данных может быть изменена с помощью обычных инструкций UPDATE, INSERT и DELETE. Предупреждение: неправильное использование этой прагмы может легко привести к повреждению файла базы данных.[alter table] (From http://www.sqlite.org/lang_altertable.html)
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец или добавить или удалить ограничения из таблицы.
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец или добавить или удалить ограничения из таблицы. Но вы можете изменить тип данных столбца таблицы или другое свойство с помощью следующих шагов.
- НАЧАТЬ ТРАНЗАКЦИЮ;
- создать временную таблицу t1_backup(a, b);
- вставить в t1_backup выбрать a, b от t1;
- DROP TABLE t1;
- создать таблицу t1 (a, b);
- вставить в t1 выберите a, b из t1_backup;
- DROP TABLE t1_backup;
- COMMIT
для более подробной информации вы можете обратиться к ссылке.

Comments