Mysqlでは、DUPULICATE KEY UPDATEという便利なオプションがある。
これは、INSERTしようとして、制約違反つまりINSERTできない場合は、指定したカラムをUPDATEするというもの。
ただ、主キーにAutoIncrement属性が付いている場合、DUPULICATE KEY UPDATEが発行されるたびに、そのキーがインクリメントされてしまう。
というのは、INSERTできない場合のUPDATE処理に進んだ場合でも、インクリメントされてしまい、いくらかした後にINSERTされた場合に、その間のIDが欠番になってしまう。
とても不格好になってしまうというのと、Intである場合、予期せずにMaxに到達してしまうという危険性がある。

対応方法としては、次のようなことが挙げられる。
・主キーをBigintにする
・単純に連番である必要がない場合は無視する
・UPULICATE KEY UPDATEを使わずに、プログラム上でINSERTとUPDATEを分岐するようにする
・AutoIncremnt制約をつけづにIDを指定する
・主キー(IDカラム)が不要なら消してしまう

<スポンサーリンク>

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)