如何在iOS中更改sql列数据类型?

时间:2015-01-18 01:02:50

标签: ios sql sqlite alter

在我的iOS应用中,我想更改数据库中的列数据类型。

ALTER TABLE XXX ALTER COLUMN myColumn INT.

我总是'接近ALTER语法错误' 如何解决问题? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您无法更改列类型。您可以使用此次列的正确数据类型创建新表,然后从旧表中选择数据并将其插入新表中。完整程序在ALTER TABLE documentation

中列出
  
      
  1. 记住与表X关联的所有索引和触发器的格式。下面的步骤7中将需要此信息。一种方法是运行如下查询:SELECT type, sql FROM sqlite_master WHERE tbl_name='X'

  2.   
  3. 使用CREATE TABLE构建一个新表“new_X”,该表格采用表X所需的修订格式。当然,确保名称“new_X”不会与任何现有的表名冲突

  4.   
  5. 使用以下语句将内容从X传输到new_X。

  6.   
  7. 如果启用了外键约束,请使用INSERT INTO new_X SELECT ... FROM X禁用它们。

  8.   
  9. 删除旧表X:PRAGMA foreign_keys=OFF

  10.   
  11. 使用以下内容将new_X的名称更改为X:DROP TABLE X

  12.   
  13. 使用ALTER TABLE new_X RENAME TO XCREATE INDEX重建与表X关联的索引和触发器。也许使用上面步骤1中保存的触发器和索引的旧格式作为指导,进行更改适合改动。

  14.   
  15. 如果最初启用了外键约束(在步骤4之前),则运行CREATE TRIGGER以验证架构更改未破坏任何外键约束,并运行PRAGMA foreign_key_check以重新启用外键约束。

  16.   
  17. 如果任何视图以受架构更改影响的方式引用表X,则使用PRAGMA foreign_keys=ON删除这些视图,并使用{{{}}重新创建它们以适应架构更改所需的任何更改1}}。

  18.   

注意,SQLite使用type affinity(列定义不会改变您在表中插入的数据类型)。因此,如果您更改数据类型,您也需要更改数据。

答案 1 :(得分:0)

  1. ALTER TABLE table ADD newColumn INTEGER;
  2. UPDATE table SET newColumn = oldColumn;