MySQL での replace と replace into の使い方の説明

MySQL での replace と replace into の使い方の説明

MySQL の replace と replace into はどちらも頻繁に使用される関数です。replace は、最初に削除してから挿入するのではなく、実際に更新操作を実行します。また、replace into は実際には insert into と非常によく似ていますが、replace into の場合、テーブル内の古いレコードが PRIMARY KEY または UNIQUE インデックスの新しいレコードと同じ値を持つ場合、新しいレコードが挿入される前に古いレコードが削除されます。

Replace は、文字列を処理するために MySQL でよく使用される関数であり、文字列内の内容を置き換えることができます。また、trim と呼ばれる同様の文字列処理操作もありますが、ここでは詳しく説明しません。

replace into の主な機能は、挿入操作に似ています。主な違いは、replace は主キーまたは一意のインデックスに基づいてデータが存在するかどうかを確認し、存在する場合は更新前に削除することです。

例:

#テーブル構造:
テーブル `t_test` を作成します (
 `id` int(11) 符号なし NOT NULL AUTO_INCREMENT,
 `name` varchar(1) NOT NULL DEFAULT ''
 主キー (`id`)、
 BTREE を使用したユニーク キー `idx_name` (`name`)
) エンジン=InnoDB デフォルト文字セット=utf8mb4

最初のレコードを挿入する

t_test (`name`) に値 ('a') を挿入します
#またはREPLACE INTO t_test (`name`) VALUES ('a')

1062 - Duplicate entry 'a' for key 'idx_name', Time: 0.001000s 。 replace into を使用すると、 id が 1 増加する点を除いて、通常どおり実行されます。

ps: replace into のキーワード into は省略できます。見た目は同じですが、使い方が少し異なります。

1. replace(オブジェクト,検索,置換)

オブジェクト内の検索のすべての出現を置換で置き換えます

select replace('www.jb51.net','w','n') from ... ---> nnn.jb51.net

例: テーブルの名前フィールドの詳細を説明に置き換える

update table set name=replace(name,'detail','description')

2. を置き換える

同等: 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;

REPLACE は INSERT とほぼ同じように動作します。テーブル内の古いレコードが PRIMARY KEY または UNIQUE インデックスの新しいレコードと同じ値を持つ場合、新しいレコードが挿入される前に古いレコードが削除されます。

テーブルに PRIMARY KEY または UNIQUE インデックスがない場合は、REPLACE ステートメントを使用しても意味がないことに注意してください。このステートメントは、新しい行が他の行と重複しているかどうかを判断するためにインデックスが使用されないために、INSERT と同一になります。

すべての列の値は、REPLACE INTO ステートメントで指定された値から取得されます。欠落している列は、INSERT INTO の場合と同様に、デフォルト値に設定されます。現在の行の値を参照することも、新しい行の値を使用することもできません。 「 SET col_name = col_name + 1 」のような代入を使用すると、右側の列名への参照は DEFAULT(col_name) として扱われます。したがって、この割り当てはSET col_name = DEFAULT(col_name) + 1と同等です。

REPLACE INTO を使用するには、テーブルに対する INSERT および DELETE 権限が必要です。

REPLACE ステートメントは、影響を受ける行の数を示す数値を返します。この数値は、削除された行と挿入された行の合計数です。単一行の REPLACE でこの数値が 1 の場合、行が挿入され、行は削除されません。この数値が 1 より大きい場合、新しい行が挿入される前に 1 つ以上の古い行が削除されました。テーブルに複数の一意のインデックスが含まれており、新しい行が異なる一意のインデックスの異なる古い行の値を複製する場合、1 つの行で複数の古い行を置き換えることが可能になります。

影響を受ける行数により、REPLACE によって 1 行のみが追加されたのか、それとも REPLACE によって他の行も置き換えられたのかを簡単に判断できます。数が 1 (追加) 以上 (置き換え) かどうかを確認します。

現在、テーブルを変更してサブクエリで同じテーブルから選択することはできません。

使用されるアルゴリズムの詳細な説明は次のとおりです (このアルゴリズムは LOAD DATA...REPLACE にも使用されます)。

1. テーブルに新しい行を挿入してみる

2. 主キーまたは一意キーの重複キー エラーが原因で挿入が失敗した場合:

  • a. テーブルから重複するキー値を含む競合行を削除する
  • b. テーブルに新しい行を再度挿入してみます

3 つの形式:

  • 1. tbl_name(col_name, ...) の値に置き換えます(...)
  • 2. tbl_name(col_name, ...) に置き換えて、... を選択します。
  • 3. tbl_name に col_name=value を設定し、... を置き換えます。

追伸:

MySQL にデータを挿入するためによく使用される 3 つのステートメント:

  • insert into はデータを挿入することを意味します。データベースは主キーをチェックし、重複がある場合はエラーを報告します。
  • replace into は、データを挿入して置き換えることを意味します。テーブルには、PrimaryKey または一意のインデックスが必要です。データベースにすでにデータが存在する場合は、新しいデータに置き換えられます。データがない場合、効果は insert into と同じです。
  • insert ignore は、同じレコードがすでに存在する場合、現在の新しいデータが無視されることを意味します。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL での重複キー更新時の replace into と insert into の使用法と相違点の分析
  • MySQL での置換例の詳細な説明
  • MySQL の replace into ステートメントの簡単な分析 (パート 2)
  • MySQLのreplace into文の簡単な分析(I)
  • MySQL の replace into ステートメントの使用方法の詳細な説明
  • MySQLの置換の使用法の簡単な分析
  • 重複キー更新におけるMySQLのReplace intoとInsert intoの本当の違い
  • MySQL における REPLACE INTO と INSERT INTO の違いの分析
  • MySQLの置換INTOの使用
  • mysql replace into の使用法の詳細な説明

<<:  Nginx 設定場所のマッチング優先順位の簡単な分析

>>:  JavaScript でシンプルなタイマーを実装する

推薦する

純粋な CSS で「テキストオーバーフローの切り捨てと省略」を実装するいくつかの方法

私たちの日常的な開発作業では、テキストのオーバーフロー、切り捨て、省略は、考慮する必要がある非常に一...

html ページ!--[IE の場合]...![endif]--使用方法の詳細な紹介

コードをコピーコードは次のとおりです。 <!--[IEの場合]><script t...

Web2.0製品と機能の簡単な紹介

<br />Web2.0とは何ですか? Web2.0にはソーシャルネットワーク製品とその...

mysql 解凍パッケージの基本インストールチュートリアル

新しいコンピューターに変更したので、すべての環境を新しいコンピューター上で設定する必要があります。ふ...

Centos7 システムに k8s クラスターを展開するための詳細な紹介

目次1 バージョンと計画1.1 バージョン情報: 1.2 クラスター計画2. 展開1. ファイアウォ...

2018 年にリリースされる Apache Spark 2.4 の新機能は何ですか?

この記事は、2018 年 9 月 19 日に Adob​​e Systems Inc で開催された ...

VueはElement el-uploadコンポーネントを使用してピットに足を踏み入れます

目次1. 基本的な使い方2. 画像量の制御3. 画像形式の制限/複数の画像を選択可能補足: vueプ...

UIエンジニアのキャリアについての私たちの考え

私は長い間落ち込んでいます、なぜでしょうか?以前、お客様から、提供されたソフトウェアが正常に動作しな...

VueはExcelデータをエクスポートするパブリック関数メソッドをカプセル化します

vue+element UI は Excel データをエクスポートするためのパブリック関数をカプセル...

XHTML CSS ウェブサイトデザインの利点と問題点

XHTML は現在国際的に推奨されている標準的な Web サイト設計言語です。Webjx.com も...

Alibaba Cloud OSS によってアップロードされた Nginx プロキシ転送実装コード

序文ミニプログラムのアップロードには https が必要なので、サーバーの https は lets...

nginxプロキシsocket.ioサービスの落とし穴の詳細な説明

目次Nginx は 2 つの socket.io サーバーをプロキシします。 socket.ioの動...

node.js でマルチコア CPU を最大限に活用する方法

目次概要node.js でマルチコア CPU を最大限に活用する方法Node で子プロセスを作成する...

ラムダ式の原則と例

ラムダ式ラムダ式 (クロージャとも呼ばれる) は、Java 8 のリリースを推進した最も重要な新機能...

LinuxはNetworkManagerを使用してMACアドレスをランダムに生成します

今では、自宅のソファーに座っていても、外の喫茶店にいても、ノートパソコンの電源を入れてWi-Fiに接...