вы просите синтаксис ALTER COLUMN, но не говорите, что хотите сделать. Это заставляет меня думать, что это слишком широко. ALTER COLUMN может многое сделать, вы хотите отказаться от ограничения not null, как в примере pg?
Эван Кэрролл,
если вы использовали инструменты intellj db, когда вы меняете столбец, он генерирует команды для вашего sqlite.
Хотя это правда, что ALTER COLUMN нет, если вы хотите только переименовать столбец, отбросить ограничение NOT NULL или изменить тип данных, вы можете использовать следующий набор опасных команд:
PRAGMA writable_schema = 1;
UPDATE SQLITE_MASTER SETSQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)'WHERENAME = 'BOOKS';
PRAGMA writable_schema = 0;
Вам нужно будет либо закрыть и снова открыть соединение, либо очистить базу данных, чтобы перезагрузить изменения в схему.
Например:
Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **createtable BOOKS ( title TEXTNOTNULL, publication_date TEXTNOTNULL);**
sqlite> **insertinto BOOKS VALUES ("NULLTEST",null);**
Error: BOOKS.publication_date may not be NULL
sqlite> **PRAGMA writable_schema = 1;**
sqlite> **UPDATE SQLITE_MASTER SETSQL = 'CREATE TABLE BOOKS ( title TEXT NOT
NULL, publication_date TEXT)'WHERENAME = '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> **insertinto BOOKS VALUES ("NULLTEST",null);**
sqlite> **.q**
ССЫЛКИ СЛЕДУЮЩИЕ:
pragmawritable_schema
Когда эта прагма включена, таблицы SQLITE_MASTER, в которых база данных может быть изменена с помощью обычных операторов UPDATE, INSERT и DELETE. Предупреждение: неправильное использование этой прагмы может легко привести к повреждению файла базы данных.
[изменить таблицу] (Из http://www.sqlite.org/lang_altertable.html )
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец, а также добавить или удалить ограничения из таблицы.
Этот метод сработал для меня, хотя, чтобы избежать ситуаций, в которых столбцы могут быть в другом порядке (например, от предыдущей команды ADD COLUMN), я использовал: UPDATE SQLITE_MASTER SET SQL = replace (SQL, '[MyColumn] integer NOT NULL' , '[MyColumn] integer NULL') WHERE NAME = 'MyTable'. Кроме того, будьте осторожны, чтобы не запускать это как часть транзакции - это может помешать выполнению некоторых из предыдущих команд транзакции.
Росс
32
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец, а также добавить или удалить ограничения из таблицы. Но вы можете изменить тип данных столбца таблицы или другое свойство, выполнив следующие действия.
Ответы:
В sqlite нет ALTER COLUMN.
Я считаю, что ваш единственный вариант - это:
Этот другой ответ Stackoverflow подробно объясняет процесс
источник
Хотя это правда, что 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**
ССЫЛКИ СЛЕДУЮЩИЕ:
pragmawritable_schema
Когда эта прагма включена, таблицы SQLITE_MASTER, в которых база данных может быть изменена с помощью обычных операторов UPDATE, INSERT и DELETE. Предупреждение: неправильное использование этой прагмы может легко привести к повреждению файла базы данных.
[изменить таблицу] (Из http://www.sqlite.org/lang_altertable.html )
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец, а также добавить или удалить ограничения из таблицы.
источник
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяет пользователю переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец, а также добавить или удалить ограничения из таблицы. Но вы можете изменить тип данных столбца таблицы или другое свойство, выполнив следующие действия.
Более подробно вы можете пройти по ссылке .
источник