在我的iOS应用中,我想更改数据库中的列数据类型。
ALTER TABLE XXX ALTER COLUMN myColumn INT.
我总是'接近ALTER语法错误' 如何解决问题? 谢谢你的帮助。
答案 0 :(得分:1)
您无法更改列类型。您可以使用此次列的正确数据类型创建新表,然后从旧表中选择数据并将其插入新表中。完整程序在ALTER TABLE documentation:
中列出
记住与表X关联的所有索引和触发器的格式。下面的步骤7中将需要此信息。一种方法是运行如下查询:
SELECT type, sql FROM sqlite_master WHERE tbl_name='X'
。使用
CREATE TABLE
构建一个新表“new_X”,该表格采用表X所需的修订格式。当然,确保名称“new_X”不会与任何现有的表名冲突使用以下语句将内容从X传输到new_X。
如果启用了外键约束,请使用
INSERT INTO new_X SELECT ... FROM X
禁用它们。删除旧表X:
PRAGMA foreign_keys=OFF
。使用以下内容将new_X的名称更改为X:
DROP TABLE X
。使用
ALTER TABLE new_X RENAME TO X
和CREATE INDEX
重建与表X关联的索引和触发器。也许使用上面步骤1中保存的触发器和索引的旧格式作为指导,进行更改适合改动。如果最初启用了外键约束(在步骤4之前),则运行
CREATE TRIGGER
以验证架构更改未破坏任何外键约束,并运行PRAGMA foreign_key_check
以重新启用外键约束。- 醇>
如果任何视图以受架构更改影响的方式引用表X,则使用
PRAGMA foreign_keys=ON
删除这些视图,并使用{{{}}重新创建它们以适应架构更改所需的任何更改1}}。
注意,SQLite使用type affinity(列定义不会改变您在表中插入的数据类型)。因此,如果您更改数据类型,您也需要更改数据。
答案 1 :(得分:0)
ALTER TABLE table ADD newColumn INTEGER;
UPDATE table SET newColumn = oldColumn;