0

我对如何在 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 语法需要一个WHEREI 然后添加

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

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

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

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

4

2 回答 2

0

好吧,愚蠢的我。

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

于 2015-03-09T11:06:38.870 回答
0

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

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

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

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

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

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

于 2019-01-29T07:44:52.153 回答