我对我在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管理器无响应,但最终它现在显示了我希望的事情。
更新查询不起作用。唯一的解决方案是,
-
编写更新查询,例如。
UPDATE table_name SET "col_name" = 'Anand Goudar' WHERE "col_id" = 'Something'
-
查询后,单击"输入列表项"
- 将鼠标悬停在文件(左上角)上,然后单击下载活动数据库
- 保存文件,此文件将包含更新的信息。
通常的假设是,当执行查询时,表行必须更改,但在这里它不会发生。因此,对于每个更新/插入/删除查询,您需要下载活动数据库。
糟糕的东西,但我相信他们(Sqlite经理)会想出一个解决方法