在单个语句中添加多列的SQLite表修改方法

198

在sqlite中,是否可以通过单个语句来更改表并添加多列?以下语句是无效的。

alter table test add column mycolumn1 text, add column mycolumn2 text;
4个回答

368
不,你必须逐个添加。请参考SQLite的ALTER TABLE文档中顶部的语法图表: ALTER TABLE syntaxADD分支中没有循环,因此不允许重复。

16
谢谢,但我认为SQLite文档中的语法图 deserve a lot of the credit。这些语法图非常好,每个人都应该在他们的文档中使用它们。 - mu is too short

20

到目前为止,我能使用的唯一方法是:

BEGIN TRANSACTION;
ALTER TABLE tblName ADD ColumnNameA TEXT DEFAULT '';
ALTER TABLE tblName ADD ColumnNameB TEXT DEFAULT '';
ALTER TABLE tblName ADD ColumnNameC TEXT DEFAULT '';
COMMIT

请注意:查询中有分号是有意为之的,以便使查询可以作为多行读取。

然后我运行此查询,并在运行时添加了多个列... 所以不是一行,但是在一个查询中是可能的。


请注意,migrate 方法已在事务中调用,因此采用此方法的好处有限。 - Nicolas

3
'@mu is too short'的回答是正确的。提供了使用SQL中的transactions特性添加多个列的优化解决方案。
String alterTableQuery = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN ";
List<String> newColumns = ..// Your new columns

db.beginTransaction();
for (String column : newColumns){
    db.execSQL(alterTableQuery + column +  " VARCHAR");
}
db.setTransactionSuccessful();
db.endTransaction();

我希望这能对某人有所帮助。


-20

修改表test,添加列mycolumn1 text; 修改表test,添加列mycolumn2 text;

使用上述重新定义的查询


7
这不是一个单独的语句 - 任何以 ; 作为分隔符的东西都必须被执行为多个语句,并且通常它确实很重要。不过,另一个答案已经证明了 OP 所要求的是不可能的。 - o11c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接