【问题标题】:How to change the sql column data type in iOS?如何在 iOS 中更改 sql 列数据类型?
【发布时间】:2015-03-16 08:46:14
【问题描述】:

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

ALTER TABLE XXX ALTER COLUMN myColumn INT.

我总是得到“接近 ALTER 语法错误” 如何解决问题? 感谢您的帮助。

【问题讨论】:

  • 您使用的是哪个数据库? sqlite3?
  • 是的,如何解决这个错误?

标签: ios sql sqlite alter


【解决方案1】:
  1. ALTER TABLE table ADD newColumn INTEGER;
  2. UPDATE table SET newColumn = oldColumn;

【讨论】:

  • 有没有直接获取的方法?像 SQLite 中的更改、修改或更改
  • 是的,正如 Rob 所说,您无法更改 SQLite 中的列类型。因此,您需要创建一个新字段,然后将旧列更新为新列。
【解决方案2】:

您无法更改列类型。您可以创建一个新表,这次使用该列的正确数据类型,然后从旧表中选择数据并将其插入到新表中。 ALTER TABLE documentation 中概述了完整的过程:

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

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

  3. 使用如下语句将内容从 X 传输到 new_X:INSERT INTO new_X SELECT ... FROM X

  4. 如果启用了外键约束,请使用 PRAGMA foreign_keys=OFF 禁用它们。

  5. 删除旧表 X:DROP TABLE X

  6. 使用 ALTER TABLE new_X RENAME TO X 将 new_X 的名称更改为 X。

  7. 使用CREATE INDEXCREATE TRIGGER 重建与表X 关联的索引和触发器。或许可以使用从上述步骤1 中保存的触发器和索引的旧格式作为指导,根据更改进行适当的更改。

  8. 如果最初启用了外键约束(在第 4 步之前),则运行 PRAGMA foreign_key_check 以验证架构更改没有破坏任何外键约束,并运行 PRAGMA foreign_keys=ON 以重新启用外键约束。

  9. 如果有任何视图以受架构更改影响的方式引用表 X,则使用 DROP VIEW 删除这些视图,并使用 CREATE VIEW 使用任何必要的更改重新创建它们以适应架构更改。

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

【讨论】:

猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
相关资源
最近更新 更多