SQLite Manager (Firefox) 不会在多行上执行 UPDATE 语句



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

这个想法是运行以下代码:

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

当我按[运行SQL]时,我的印象是即使"最后一个错误"字段显示"不是错误",也不会发生任何事情。也许它只是非常快?不,当我进入数据时,我发现它没有更新任何东西,我的 places 文件夹仍然充满 old.com URL。

但是,当我尝试时

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/文件夹的副本上执行此操作,而不是直接在"实时"版本上执行此操作。所以锁定也不应该成为问题。

好吧,愚蠢的我。

事实证明,这失败了,因为我已经有一些带有 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管理器无响应,但最终它现在显示了我希望的事情。

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

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

    UPDATE table_name SET "col_name" = 'Anand Goudar' WHERE "col_id" = 'Something'
    
  2. 查询后,单击"输入列表项"

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

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

糟糕的东西,但我相信他们(Sqlite经理)会想出一个解决方法

相关内容

  • 没有找到相关文章