1

私はこの問題を見てきましたが(下部のリンクを参照)、答えがわからないようです。問題は、主キーである自動インクリメントIDを持つテーブルと、重複を避けるためにUNIQUEインデックスを持つ別のフィールドにデータを挿入することです。これは機能しますが、データが保存されていなくても、IDがインクリメントされます。

自動インクリメントを削除し、max(ID)を選択して自分で処理する方がよいでしょうか?


現時点では、それをそのまま機能させるために、次のようないくつかの戦略を試しましたINSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE

私の最近の試みは、次のクエリを使用することでした。

INSERT INTO
    content(field1, field2)
SELECT(:field1, :field2) FROM DUAL
WHERE NOT EXISTS(
    SELECT field1, field2
    FROM content
    WHERE field1 = :field1
)

関連している

4

2 に答える 2

0

この質問のおかげで、私はそのエラーを修正することができました。問題はSELECT(:field1, :field2)、括弧を付けるべきではないということでした。したがって、クエリは次のようになります。

INSERT INTO
    content(field1, field2)
SELECT :field1, :field2 FROM DUAL
WHERE NOT EXISTS(
    SELECT field1, field2
    FROM content
    WHERE field1 = :field1
)
于 2014-04-11T20:18:19.863 に答える
0

あなたはただORDERBYをすることができます:)

UPDATE 'table' 
    SET column_id = column_id+1 
    WHERE column_id > [point where you want a un-occupied key] 
    ORDER BY column_id DESC

mysqlは、最初にwhereとorderを実行し、次に更新を実行します

于 2014-07-16T15:58:10.570 に答える