MySQL:好ましいMySQL replace into使い方(insert intoの強化版)


人に好かれるMySQL replace intoの使い方(insert intoの強化版)
テーブルにデータを挿入するとき、よくこのような状況に遭遇します:1.まずデータが存在するかどうかを判断する.2.存在しない場合は挿入;3.存在する場合は更新します.
SQL Serverでは、次のように処理できます.
   if not exists (select 1 from t where id = 1)
      insert into t(id, update_time) values(1, getdate())
   else
      update t set update_time = getdate() where id = 1

ではMySQLではどのようにしてこのような論理を実現しますか?焦らないで!MySQLではもっと簡単な方法があります:replace into
replace into t(id, update_time) values(1, now());

または
replace into t(id, update_time) select 1, now();

replace intoはinsert機能と似ていますが、replace intoはまずテーブルにデータを挿入しようとします.テーブルにすでにロー・データがある場合(プライマリ・キーまたはユニーク・インデックスに基づいて判断)は、ロー・データを削除してから、新しいデータを挿入します.2.それ以外の場合は、新しいデータを直接挿入します.
データを挿入するテーブルには、プライマリ・キーまたは一意のインデックスが必要です.そうでない場合、replace intoは直接データを挿入し、テーブルに重複するデータが表示されます.
MySQL replace intoには3つの形式があります.
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...

前の2つの形式はもっと使います.その中で「into」のキーワードは省略できますが、「into」をつけると、より直感的な意味になります.また、値が与えられていないカラムについては、MySQLが自動的にデフォルト値を割り当てます.