FMDB MODIFY 查询无法在现有 SQLite 数据库中设置约束

Posted

技术标签:

【中文标题】FMDB MODIFY 查询无法在现有 SQLite 数据库中设置约束【英文标题】:FMDB MODIFY query not working to set constraints in existing SQLite database 【发布时间】:2019-06-04 08:57:25 【问题描述】:

我的 sqlite 数据库在 tbl_order 中有一个名为 order_id 的现有列,其中包含重复的条目。 我正在尝试删除重复条目并添加约束(唯一)来解决这个问题。

所以我尝试了以下代码来解决上述问题。 我检查了以前和当前的构建版本来管理现有的和新的数据库。

它成功执行了第一个查询,但在修改约束中显示错误。

    if (previousBuildVersion < currentBuildVersion) 
        FMResultSet *result = nil;
        result = [self.objDB executeQuery:@"SELECT DISTINCT order_id FROM tbl_order ORDER BY order_id"];
        [self.objDB executeUpdate:@"ALTER TABLE 'tbl_order' MODIFY \ 'order_id' TEXT NOT NULL UNIQUE \ ;"];
    

我在 Xcode 中收到此错误:

“修改”附近的[记录]:语法错误

数据库错误:1“靠近“修改”:语法错误”

由于我使用 FMDB 库的经验非常少,因此请提出解决方案。

提前致谢。

【问题讨论】:

【参考方案1】:

sqlite 中的列一旦创建就不能更改。

仅支持ALTER TABLE 命令的RENAME TABLEADD COLUMN 变体。其他类型的ALTER TABLE 操作如DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT, 等被省略。

请查看此链接了解更多详情: https://www.sqlite.org/omitted.html

【讨论】:

以上是关于FMDB MODIFY 查询无法在现有 SQLite 数据库中设置约束的主要内容,如果未能解决你的问题,请参考以下文章

使用 fmdb 无法更新 blob 类型数据

sqlit中使用到的查询语句

在使用 FMDB 执行 sqlite 查询时受到打击

编写SQL语句UPDATE查询FMDB

多个查询未在 FMDB 中运行

iOS的SQLite利用FMDB进行操作时无法打开数据库