如何更改sqlite中的列?这是在Postgresql
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
我相信sqlite中根本没有ALTER COLUMN,仅支持ALTER TABLE。
任何的想法?谢谢!
如何更改sqlite中的列?这是在Postgresql
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
我相信sqlite中根本没有ALTER COLUMN,仅支持ALTER TABLE。
任何的想法?谢谢!
Answers:
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**
参考如下:
pragma writable_schema
启用此pragma时,可以使用普通的UPDATE,INSERT和DELETE语句在其中更改数据库的SQLITE_MASTER表。警告:滥用该编译指示很容易导致数据库文件损坏。
[ALTER TABLE](来自http://www.sqlite.org/lang_altertable.html)
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。无法重命名列,删除列或从表中添加或删除约束。
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。无法重命名列,删除列或从表中添加或删除约束。但是您可以通过以下步骤更改表列数据类型或其他属性。
有关更多详细信息,请参考链接。