Изменить столбец в 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 позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец или добавить или удалить ограничения из таблицы.

ALTER TABLE SYNTAX


SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец или добавить или удалить ограничения из таблицы. Но вы можете изменить тип данных столбца таблицы или другое свойство, выполнив следующие шаги.

  1. НАЧАТЬ ТРАНЗАКЦИЮ;
  2. создать временную таблицу t1_backup(a,b);
  3. вставить в T1_BACKUP выбрать a, b от t1;
  4. DROP TABLE t1;
  5. создать таблицу t1 (a,b);
  6. вставить в t1 выберите a, b из t1_backup;
  7. DROP TABLE t1_backup;
  8. COMMIT

для Больше детали вы можете сослаться ссылке.