REPLACE INTO ... SELECT は、あるテーブル (またはビュー) から別のテーブルへレコードをリアルタイムでコピーします。この操作は、まずレコードの挿入を試みます。ターゲットテーブルに同じプライマリキーを持つレコードがすでに存在する場合 (プライマリキーの競合) 、既存のレコードを削除した後に新しいレコードを挿入します。競合が発生しない場合は、レコードを直接挿入します。
仕組み
コピーされる各レコードに対して、AnalyticDB for MySQL は次の手順を実行します。
-
ターゲットテーブルへのレコードの挿入を試みます。
-
プライマリキーの競合が発生した場合、競合するレコードを削除します。
-
新しいレコードを挿入します。
REPLACE INTO ... SELECT の使用場面
REPLACE INTO ... SELECT は、プライマリキーが一致する既存のレコードを上書きする必要がある場合に使用します。たとえば、更新されたソースデータでサマリーテーブルを更新するケースなどが該当します。
構文
REPLACE INTO table_name
[(column_name, ...)]
query;
パラメーター
| パラメーター | 説明 |
|---|---|
table_name |
ターゲットテーブルの名前。このステートメントを実行する前に、テーブルが存在する必要があります。 |
column_name |
(オプション) データのコピー先となるカラム。これを指定した場合、SELECT 句のカラムは、リストされたカラムと同じ順序で、かつ互換性のあるデータ型で一致する必要があります。 |
query |
コピーするレコードを定義する SELECT FROM TABLE または SELECT FROM VIEW ステートメント。 |
前提条件
-
ターゲットテーブルが存在する必要があります。
例
customer テーブルから 3 つのカラムを new_customer テーブルにコピーし、プライマリキーが一致する既存のレコードを上書きします。
REPLACE INTO new_customer (customer_id, customer_name, phone_num)
SELECT customer_id, customer_name, phone_num FROM customer
WHERE customer.customer_name = 'Alan';