0

ドキュメントによると:

[columns aand bare]が一意の場合、は代わりに次のステートメント INSERTと同等です。UPDATE

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

複数の行に一致する場合a=1 OR b=2、1つの行のみが更新されます。一般に、ON DUPLICATE KEY UPDATE複数の一意のインデックスを持つテーブルで句を使用しないようにする必要があります。

これは十分に公平ですが、これを唯一の鍵として持っている場合はどうなりますか?

PRIMARY KEY (`a`,`b`)

重複キーは両方のフィールドに同時に依存しているため、更新は重複が発生する特定の行に確実に影響しますか、それともフィールドが個別に一意であるかのように同じように機能しますか?

4

2 に答える 2

1

例と同じクエリを使用していると仮定すると、重複キーで行を確実に更新することはできません。一致する値のいずれかを持つデータ順序の最初の行が引き続き検索されます。以下の例を考えてみましょう。

   a | b
1. 1 | 1
2. 1 | 2
3. 1 | 3
4. 1 | 4
5. 2 | 1
6. 2 | 2

クエリUPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;は、目的の 2 行目ではなく、最初の行を更新します。したがって、簡単に言えば、列が個別に一意であるのと同じです。

于 2012-08-28T02:56:31.980 に答える
0

列ウィッチが一意またはプライマリとして定義されている場合、または一意または主キーで定義された列の同じセットが重複している場合、insert ... on duplicate update ... ステートメントは、すべての列が含まれる行を更新します。この PK または一意のキーの値は同じです。

G-Nugget の回答に対するコメントに回答するには、行 2 のみが更新されます。

それが役立つことを願っています;-)

于 2012-08-28T03:12:25.367 に答える