如何更改 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;
您需要关闭并重新打开连接,或者清理数据库以将更改重新加载到架构中。
例如:
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
当此编译指示打开时,可以使用普通的 UPDATE、INSERT 和 DELETE 语句更改数据库所在的 SQLITE_MASTER 表。警告:滥用此编译指示很容易导致数据库文件损坏。
[更改表](来自 http://www.sqlite.org/lang_altertable.html)
SQLite 支持 ALTER TABLE 的有限子集。 SQLite 中的 ALTER TABLE 命令允许用户重命名表或向现有表添加新列。无法重命名列、删除列或添加或删除表中的约束。
SQLite 支持 ALTER TABLE 的有限子集。 SQLite 中的 ALTER TABLE 命令允许用户重命名表或向现有表添加新列。无法重命名列、删除列或添加或删除表中的约束。但您可以通过以下步骤更改表列数据类型或其他属性。
欲了解更多详情,您可以参考链接。
创建表 temp_Table(x,y[,etc]);
INSERT INTO temp_Table SELECT * FROM Table;
下降表表;
更改表 temp_Table 重命名为表;
感谢您帮助我找到确定的方法!
如果您所做的只是更改列的类型,那么您通常不需要更改列,因为 SQLite 是动态类型的,您可以放置列类型以外的数据;列类型更多的是一种建议。您可能需要解决列类型(强制规则)带来的一些怪癖,但数据库会很乐意接受“错误”类型的数据。
在所有实践中,您通常不会大幅更改列的类型(在典型的数据库中,您通常只会更改类型的大小 - 例如
VARCHAR(16)
-> VARCHAR(32)
- 而不是类型的类别),因此唯一需要解决的问题是 NOT NULL 约束 - 在这种情况下,您可以使用此处其他有用的答案之一来实现您正在寻找的目标。