ALTER COLUMN в sqlite - PullRequest
       2

ALTER COLUMN в sqlite

66 голосов
/ 24 октября 2010

Как изменить столбец в sqlite? Это в Postgresql

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

Я полагаю, что в sqlite вообще нет ALTER COLUMN, поддерживается только ALTER TABLE.

Есть идеи? Спасибо!

Ответы [ 3 ]

96 голосов
/ 24 октября 2010

В sqlite нет ALTER COLUMN.

Я считаю, что ваш единственный вариант:

  • Переименование таблицы во временное имя
  • Создать новую таблицу без ограничения NOT NULL
  • Скопировать содержимое старой таблицы в новую
  • Удалить старую таблицу

Этот другой ответ Stackoverflow подробно объясняет процесс

61 голосов
/ 27 января 2011

Хотя верно то, что значение ALTER COLUMN отсутствует, если вы хотите только переименовать столбец, удалить ограничение 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,и УДАЛИТЬ заявления.Предупреждение: неправильное использование этой прагмы может легко привести к повреждению файла базы данных.

[alter table] (начиная с http://www.sqlite.org/lang_altertable.html)
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяетПользователь может переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец или добавить или удалить ограничения из таблицы.

ALTER TABLE SYNTAX

30 голосов
/ 11 октября 2012

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

  1. НАЧАЛО СДЕЛКИ;
  2. СОЗДАНИЕ ВРЕМЕННОЙ ТАБЛИЦЫ t1_backup (a, b);
  3. INSERTINTO t1_backup ВЫБРАТЬ a, b ОТ t1;
  4. DROP TABLE t1;
  5. CREATE TABLE t1 (a, b);
  6. ВСТАВИТЬ В t1 ВЫБРАТЬ a, b ОТ t1_backup;
  7. DROP TABLE t1_backup;
  8. COMMIT

Более подробно вы можете обратиться по ссылке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...