株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

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カラム)が不要なら消してしまう

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

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