<div class="section">
例えばユーザーのプロフィール情報を保存しておくuser_profilesテーブルに対して、
・新規登録ならばINSERT
・プロフィール更新ならばUPDATE
するとしよう。
user_profiles
id | name | intro |
1 | hoge | こんにちは |
①登録したいユーザーのデータがuser_profilesに存在するかをみる。
②①が存在していればUPDATE、①が存在していなければINSERTをする。
まぁこれだけですが、プログラムで書くと
$sql = 'SELECT id FROM user_profiles WHERE id = 1'; $ret = /*SQLを実行した結果データ*/ if ($retがある) { $sql = 'UPDATE user_profiles SET intro = おやすみなさい WHERE name = hoge'; } else { $sql = 'INSERT INTO user_profiles (name, intro) VALUE (hoge, おやすみなさい)'; } /*$sqlを実行*/
とかなる。
これをもっとシンプルにできるのが「ON DUPLICATE KEY UPDATE」です。
$sql = 'INSERT INTO user_profiles (name, intro) VALUE (hoge, おやすみなさい) ON DUPLICATE KEY UPDATE intro = おやすみなさい'; /*$sqlを実行*/
これだけで動きます。
ただしこれを使うには、挿入する行に主キーかユニークキーが含まれることが条件です。
重複を許さない主キーかユニークキーに対してINSERTをつかい、主キーかユニークキーが重複してしまうと、勝手にUPDATEが使われるらしいです。
データの有り無し便利ですね。
参考
http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html