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或其他属性。

  1. BEGIN TRANSACTION;
  2. CREATE TEMPORARY TABLE t1_backup(a,b);
  3. INSERT INTO t1_backup SELECT a,b FROM t1;
  4. DROP TABLE t1;
  5. CREATE TABLE t1(a,b);
  6. INSERT INTO t1 SELECT a,b FROM t1_backup;
  7. DROP TABLE t1_backup;
  8. 承诺

有关更多详细信息,请参阅链接 。

没有其他答案是不正确的,但我发现处理复杂的ALTERs最简单的方法是通过Sqliteman (FOSS)。

它会处理你的杂耍行为(如其他答案中所述)。

selectbooks_book表,通过菜单:Context> Alter Table:Un-check NULL> Alter,done

请参阅Sqliteman文档:变更表

对于那些在2017年search和查找此页面的用户:如果您是SQLite新手和/或更喜欢GUI,那么“sqlitebrowser”只需点击几下即可完成。

  1. “文件” – “打开数据库”
  2. 在“数据库结构”选项卡中,单击表格内容(不是表格名称),然后单击“编辑”菜单中的“修改表格”,现在可以使用下拉菜单更改任何列的数据types。 我将“文本”字段更改为“数字”,以检索数字范围内的数据。

“sqlitebrowser”程序(用于SQLite的DB Browser)是开放源代码且免费的。 对于Linux,它可以从存储库中获得。 希望这可以帮助别人!