如何更改sqlite中的列?
这是Postgresql
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
我相信sqlite中根本没有ALTER COLUMN,只支持ALTER TABLE。
有什么想法吗?谢谢!
答案 0 :(得分:96)
sqlite中没有ALTER COLUMN。
我相信你唯一的选择是:
This other Stackoverflow answer详细解释了该过程
答案 1 :(得分:61)
虽然确实没有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表。警告:滥用此pragma很容易导致数据库文件损坏。
[alter table](来自http://www.sqlite.org/lang_altertable.html)
SQLite支持ALTER TABLE的有限子集。 SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。无法重命名列,删除列,或从表中添加或删除约束。
答案 2 :(得分:30)
SQLite支持ALTER TABLE的有限子集。 SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。无法重命名列,删除列,或从表中添加或删除约束。但您可以通过以下步骤更改表列数据类型或其他属性。
有关详细信息,请参阅link。
答案 3 :(得分:1)
ALTER COLUMN
在 SQLite
中不存在。
仅支持更改操作:
Alex Jasmin's answer shows possible way
参考:
答案 4 :(得分:0)
创建表 temp_Table(x,y[,etc]);
INSERT INTO temp_Table SELECT * FROM Table;
DROP TABLE 表;
ALTER TABLE temp_Table RENAME TO Table;
谢谢你帮我找到了一个确定的方法!