如何在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语句。
有什么想法吗?谢谢!
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;
你需要关闭并重新打开你的连接或者对数据库进行vacuum操作,以便将更改重新加载到架构中。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 命令允许用户重命名表或向现有表添加新列。无法重命名列、删除列或从表中添加或删除约束。
SQLite支持有限的ALTER TABLE子集。在SQLite中的ALTER TABLE命令允许用户重命名表或向现有表添加新列。不可能重命名列,删除列或添加或删除表上的约束。但是您可以按照以下步骤更改表列数据类型或其他属性。
欲了解更多详情,请参考链接。
创建临时表temp_Table(x,y[,等]);
插入数据到临时表temp_Table:INSERT INTO temp_Table SELECT * FROM Table;
删除原表Table:DROP TABLE Table;
将临时表temp_Table重命名为Table:ALTER TABLE temp_Table RENAME TO Table;
感谢您帮助我找到确切的方法!
ALTER COLUMN
在 SQLite
中不存在。
仅支持以下更改操作:
参考资料:
VARCHAR(16)
-> VARCHAR(32)
- 而不是类型的类别),所以唯一需要解决的问题是非空约束-在这种情况下,你可以使用其他有用的答案来实现你想要的结果。