0

SQLite で単純な更新を行うことに失敗したように見えることに混乱しています。Firefox に SQLite Manager をインストールしましたが、最近「プロバイダー」を変更したため、そこで moz_places テーブルを更新したいと考えています。新しい場所へ。

アイデアは、このコードを実行することです:

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

[SQL の実行] を押すと、[最後のエラー] フィールドに「エラーではありません」と表示されていても、何も起こらないような印象を受けます。多分それは単に非常に速いですか?いいえ、その後データにアクセスすると、何も更新されておらず、場所フォルダーがまだ old.com の URL でいっぱいであることがわかりました。

しかし、試してみると

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

この 1 つのレコードを更新します。

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 Manager が応答しなくなりましたが、最終的には、私が望んでいたように表示されるようになりました。

于 2015-03-09T11:06:38.870 に答える