ALTER COLUMN在sqlite中
如何改变sqlite中的列? 这是在Postgresql
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
我相信在sqlite中没有ALTER COLUMN,只有ALTER TABLE被支持。
任何想法? 谢谢!
在sqlite中没有ALTER COLUMN。
我相信你唯一的select是:
- 将该表重命名为临时名称
- 创build一个没有NOT NULL约束的新表
- 将旧表格的内容复制到新表格
- 删除旧桌子
这个其他的Stackoverflow答案详细解释了这个过程
虽然确实不是ALTER COLUMN,但如果只想重命名该列,删除NOT NULL约束或更改数据types,则可以使用以下一组危险命令:
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;
您将需要closures并重新打开连接,或者抽空数据库以将更改重新加载到模式中。
例如:
Y:> sqlite3 booktest
SQLite版本3.7.4
input“.help”获取说明
input以“;”结尾的SQL语句
sqlite> create table BOOKS(title TEXT NOT NULL,publication_date TEXT NOT NULL);
sqlite> insert into BOOKS VALUES(“NULLTEST”,null);
错误:BOOKS.publication_date可能不是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版本3.7.4
input“.help”获取说明
input以“;”结尾的SQL语句
sqlite> insert into BOOKS VALUES(“NULLTEST”,null);
sqlite> .q
参考资料如下:
编译指示writeable_schema
当此编译指示打开时,可使用普通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命令允许用户重命名表或向现有表添加新列。 不能重命名列,删除列或添加或删除表中的约束。 但是您可以通过以下步骤更改表列数据types或其他属性。
- BEGIN TRANSACTION;
- CREATE TEMPORARY TABLE t1_backup(a,b);
- INSERT INTO t1_backup SELECT a,b FROM t1;
- DROP TABLE t1;
- CREATE TABLE t1(a,b);
- INSERT INTO t1 SELECT a,b FROM t1_backup;
- DROP TABLE t1_backup;
- 承诺
有关更多详细信息,请参阅链接 。
没有其他答案是不正确的,但我发现处理复杂的ALTERs最简单的方法是通过Sqliteman (FOSS)。
它会处理你的杂耍行为(如其他答案中所述)。
selectbooks_book表,通过菜单:Context> Alter Table:Un-check NULL> Alter,done
请参阅Sqliteman文档:变更表
对于那些在2017年search和查找此页面的用户:如果您是SQLite新手和/或更喜欢GUI,那么“sqlitebrowser”只需点击几下即可完成。
- “文件” – “打开数据库”
- 在“数据库结构”选项卡中,单击表格内容(不是表格名称),然后单击“编辑”菜单中的“修改表格”,现在可以使用下拉菜单更改任何列的数据types。 我将“文本”字段更改为“数字”,以检索数字范围内的数据。
“sqlitebrowser”程序(用于SQLite的DB Browser)是开放源代码且免费的。 对于Linux,它可以从存储库中获得。 希望这可以帮助别人!