首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改sqlite中的列

问修改sqlite中的列
EN

Stack Overflow用户
提问于 2010-10-24 11:17:21
回答 5查看 123.5K关注 0票数 86

如何更改sqlite中的列?这是用Postgresql编写的

代码语言:javascript
复制
ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

我相信sqlite中根本没有ALTER COLUMN,只支持ALTER TABLE。

有什么想法吗?谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-24 11:45:33

sqlite中没有ALTER列。

我相信你唯一的选择就是:

  • 将表重命名为临时名称
  • 创建不带NOT NULL的新表将旧表的内容重命名为新表
  • 删除旧表

This other Stackoverflow answer详细解释了这一过程

票数 117
EN

Stack Overflow用户

发布于 2011-01-28 02:11:06

虽然is no ALTER COLUMN是真的,但如果您只想重命名该列、删除NOT NULL约束或更改数据类型,则可以使用以下一组危险命令:

代码语言:javascript
复制
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;

您需要关闭并重新打开连接,或者清空数据库以将更改重新加载到模式中。

例如:

代码语言:javascript
复制
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表。警告:误用此编译指示很容易导致数据库文件损坏。

alter table

SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER table命令允许用户重命名表或向现有表中添加新列。不能重命名列、删除列,也不能在表中添加或删除约束。

​

​

票数 66
EN

Stack Overflow用户

发布于 2012-10-11 19:32:41

SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER table命令允许用户重命名表或向现有表中添加新列。不能重命名列、删除列,也不能在表中添加或删除约束。但是您可以通过以下步骤更改表列数据类型或其他属性。

CREATE TABLE BEGIN TRANSACTION;

  • CREATE临时表t1_backup(a,b);

  • INSERT INSERT INTO t1_backup SELECT a,b FROM t1;

  • DROP TABLE t1;

  • CREATE TABLE t1(a,b);

  • INSERT INTO t1 SELECT a,b FROM TABLE TABLE

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

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4007014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档