【问题标题】:SQLite Manager (Firefox) does not do UPDATE statement on multiple rowsSQLite Manager (Firefox) 不对多行执行 UPDATE 语句
【发布时间】:2015-05-10 12:15:21
【问题描述】:

我对在 SQLite 中进行简单更新似乎失败感到困惑。我已经在 Firefox 中安装了 SQLite 管理器,我想在那里更新 moz_places 表,因为我们最近更改了“提供者”,而不是在 Firefox 中清除我的整个历史记录,我认为如果我可以简单地更新信息以便历史记录点会很好到新位置。

想法是运行这段代码:

UPDATE moz_places SET url = REPLACE(url, '.old.com/', '.new.com/')

当我按下 [Run SQL] 时,我的印象是即使 Last Error 字段显示“不是错误”,也没有任何反应。也许它只是非常快?不,当我进入数据时,我发现它没有更新任何东西,而且我的位置文件夹仍然充满 old.com 网址。

但是,当我尝试时

UPDATE moz_places SET url = REPLACE(url, '.old.com/', '.new.com/') WHERE id = 2458

它确实更新了这条记录。

天真地假设 SQLite 语法需要 WHERE 然后我添加了

UPDATE moz_places SET url = REPLACE(url, '.old.com/', '.new.com/') WHERE id > 0

但这也没有给我带来任何结果。

SQLite 是否只允许单行更新?在互联网上环顾四周,我没有看到这样的限制,但否则我不确定可能是什么问题。

PS:我在 %appdata% 中找到的 /Profiles/ 文件夹的副本上执行此操作,而不是直接在“实时”版本上执行此操作。所以锁定也不应该是个问题。

【问题讨论】:

  • 检查我的帖子是否有拼写错误我现在突然想知道这是否可能是由于我正在触发的唯一约束/索引...

标签: sqlite firefox sqlitemanager


【解决方案1】:

好吧,我傻了。

事实证明这失败了,因为我已经在 new.com url 中有一些记录,然后我的 UPDATE 会导致冲突。

我已经通过这条路线解决了:

UPDATE moz_places 
   SET url = REPLACE(moz_places.url, '.old.com', '.new.com') 
 WHERE NOT EXITS ( SELECT *
                      FROM moz_places o 
                     WHERE o.url = REPLACE(moz_places.url, '.old.com', '.new.com') )

确实需要一段时间才能完成;使 SQLite 管理器无响应,但最终它现在显示的内容与我希望的一样。

【讨论】:

    【解决方案2】:

    更新查询不起作用。唯一的解决办法是,

    1. 编写更新查询,例如。

      UPDATE table_name SET "col_name" = 'Anand Goudar' WHERE "col_id" = 'Something'
      
    2. 查询后点击进入List item

    3. 将鼠标悬停在文件上(左上角)并点击下载活动数据库
    4. 保存文件,此文件将包含更新的信息。

    通常的假设是,当查询被执行时,表行必须改变,但在这里它不会发生。因此,对于每个更新/插入/删除查询,您都需要下载活动数据库。

    糟糕的东西,但我相信他们(Sqlite 管理员)会想出一个修复方法

    【讨论】:

    • 我意识到我必须刷新数据才能看到新值;但问题更多的是查询失败而没有给我一个正确的指示。正如我自己的回答所见,查询的结果将与唯一约束发生冲突。通过解决这个问题,UDPATE 运行良好,并且确实在刷新后可见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    相关资源
    最近更新 更多