5


0

私は*メモリテーブル*を使用しています。 それはいくつかのIDを持ち、すべてのデータが整数であることに対抗する。 私のコードは、データが存在する場合はカウンタを1だけ更新し、存在しない場合はcounter = 1の行を作成します。

私が使用するクエリは:

重複キー更新にlinked_mem(id1、id2、id31、id4 cnt)値(31316、0、557158967、261470594、1)を挿入します。cnt = cnt 1

時折(挿入の約5%)、キー1に "重複したエントリ '[キー番号]' 'と表示されます。

問題は何でしょうか。 ON DUPLICATE KEY UPDATE部分は重複キーを処理するはずですか?

更新:実テーブルの作成テーブルを追加

CREATE TABLE `linked_mem`(` li_sid` int(10)符号なしNOT NULLのデフォルト '0'、 `li_id1` int(10)符号なしNOT NULLのデフォルト '0'、` li_cid1` int(10)符号なしNOT NULLのデフォルト '0' 、 `li_id2` int(10)符号なしNOT NULLデフォルト '0'、` li_cid2` int(10)符号なしNOT NULLデフォルト '0'、 `cnt` int(10)符号なしNOT NULLデフォルト '1'、` li_filter` int (10)unsigned NOT NULLのデフォルト '0'、 `li_group` int(10)unsigned NOT NULLのデフォルト '0'、PRIMARY KEY(` li_id1`、 `li_sid`、` li_cid1`、 `li_cid2`、` li_group`、 cnt`、 `li_id2`)ENGINE = MEMORY DEFAULT CHARSET = latin1

5 Answer


10


これは、「+ UNIQUE 」とマークされたフィールドを更新し、2回目のキー違反が「 UPDATE +」で発生した場合に発生する可能性があります。

更新

あなたのテーブル構造から、私はそれがまさにあなたのケースであることがわかります。

それが起こるのです:

INSERT INTO linked_mem
        ( id1, id2, id31, id4 cnt)
        VALUES (31316, 0, 557158967, 261470594, 1)

-- inserts

INSERT INTO linked_mem
        ( id1, id2, id31, id4 cnt)
        VALUES (31316, 0, 557158967, 261470594, 1)

-- updates `cnt` to 2

INSERT INTO linked_mem
        ( id1, id2, id31, id4 cnt)
        VALUES (31316, 0, 557158967, 261470594, 1)

-- tries again to update `cnt` to 2 and fails

`+ PRIMARY KEY `定義から ` cnt +`を削除します。


1


`+ cnt +`は主キーにあります。それがエラー/更新不能の原因になっている可能性があります。


1


主キーが正しいことを確認していますか? この主キーを使用すると、cntの値によっても行が識別されます。この値は、カウンタと見なされます。

私はこれをテストしていませんが、空のテーブルから始めると次のクエリでエラーが発生すると思います。

INSERT INTO linked_mem(id1、id2、id31、id4、cnt)値(1、1、1、1、1)、//(1、1、1、1、1)追加(1、1、1、1、 1)、//(1、1、1、1、1)→(1、1、1、1、2)(1、1、1、1、1)、//(1、1、1、、 1、1)追加(2行)(1、1、1、1、1)//重複キー更新時のエラーcnt = cnt 1

4行目では、(1、1、1、1、1)は(1、1、1、1、2)に更新されますが、これはすでに存在します。


0


わかりにくい列名を見分けるのは困難ですが、その主キーの幅が非常に広いため、まったく意味がありません。 それが実際に何をしているのか、そしてなぜその列のセットが選ばれたのか より良い選択はありますか? 私は他のポスターは正しいと思います、そしてあなたの最新版はPKの黙示的な一意性の制約に違反しています。カウントがあなたのPKコラムの1つであるので、それはほとんど予想されることです。


0


私は同じ問題を抱えていました。

  • ON DUPLICATE KEY UPDATE を使用してもエラーが発生する。*重複エントリ

他の列に一意のキーインデックスがあり、1つの行に空の値があるために発生しました。