Изменить столбец в sqlite
Как изменить столбец в sqlite?
Это в Postgresql
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
Я считаю, что в sqlite вообще нет столбца ALTER, поддерживается только ALTER TABLE.
есть идеи? Спасибо!
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
для Больше детали вы можете сослаться ссылке.