1

mysql> update tablename set fieldname = 'C200900674' where fieldname - 'C200900673';

エラー 1062 (23000): キー 1 のエントリ 'C200900674-2008-0-1' が重複しています

これに関する考えや提案はありますか?等号の代わりにマイナス記号を使用して誤ってその更新を行った人がいます。その値よりも小さいすべてのレコードを変更しようとしたようです。英数字であり、実際にはかなり不完全ですが。その上、エラーが発生する前に大量のレコードが更新され、フィードバックはまったくありませんでした。「クエリOK、X行が影響を受けました(0.00秒)」のようなものではないため、変更された数がわかりませんでした。autocommit=1 なので、ロールバックできません。

とにかく、これに関するヒントや指針を探しているだけです。なぜそのクエリが何かをしたのか、実際にはエラーが返されたはずです。もちろん、経験の浅い管理者に骨の折れることをさせないという明白な答えを除いて.

4

2 に答える 2

0

テーブルが InnoDB ストレージ エンジンを使用している場合、害はありません。autocommit=1 を使用しても、クエリは「全か無か」でのみ実行されます。ERROR メッセージが表示されたという事実は、DB がデータに触れていないことを証明しています。エラーが発生するたびに、「x 行が影響を受けました」というメッセージは省略されます。

一意性制約に違反していない場合でも、クエリは別のエラーで失敗します。

エラー 1292 (22007): 切り捨てられた不正な DOUBLE 値: 'fieldname'

これは、マイナス記号が原因で、MySQL がフィールドの内容から何かを差し引いた値を計算しようとしたためです。これは動作しません。もう一方が「最初にそこに到達した」ため、このエラーは表示されませんでした。

于 2009-05-20T12:32:34.230 に答える