mysql replace into の使用法の詳細な説明

mysql replace into の使用法の詳細な説明

replace ステートメントは、一般的に insert ステートメントに似ています。ただし、テーブルに主キーまたは一意のインデックスがある場合、挿入されたデータが元の主キーと同じか一意であれば、元のデータは削除され、新しいデータが追加されます。そのため、replace ステートメントを実行することは、delete ステートメントと insert ステートメントを実行することと同じになることがあります。早速例を見てみましょう。

id、title、uid の 3 つのフィールドを持つテスト テーブルを作成します。id は自動インクリメントの主キーで、uid は一意のインデックスです。

テーブル「test」を作成します(
 `Id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(25) デフォルト NULL コメント 'タイトル',
 `uid` int(11) デフォルト NULL コメント 'uid',
 主キー (`Id`)、
 ユニークキー `uid` (`uid`)
)ENGINE=InnoDB デフォルト文字セット=utf8mb4;

test(title,uid) に VALUES ('Hello','1') を挿入します。
test(title,uid) に VALUES ('National Day','2') を挿入します。

結果は次のとおりです。

replace into を使用してデータを挿入する場合:

test(title,uid) VALUES ('今回は8日間休みです','3') に置き換えます。

uidが存在する場合は、replace intoステートメントを使用します

REPLACE INTO test(title,uid) VALUES ('これはUid=1の最初のデータです','1');

MySQL がデータの競合 (つまり、uid の重複) に遭遇したときに、実際に古いレコードを削除して新しいレコードを書き込むとは予想していませんでした。上記の例から、ブロガーは次のことがわかると思います。

replace into は insert と似ていますが、replace into は最初にテーブルにデータを挿入しようとする点が異なります。

1. このデータ行がテーブル内に既に存在することが判明した場合 (主キーまたは一意のインデックスによって決定)、まずこのデータ行を削除してから、新しいデータを挿入します。 2. それ以外の場合は、新しいデータを直接挿入します。

データが挿入されるテーブルには、主キーまたは一意のインデックスが必要であることに注意してください。そうでない場合、replace into はデータを直接挿入し、テーブルに重複したデータが生成されます。

MySQL の replace into には 3 つの形式があります。

1. tbl_name(col_name, ...) の値に置き換えます(...)

2. tbl_name(col_name, ...) に置き換えて、... を選択します。

3. tbl_name に col_name=value を設定し、... を置き換えます。

最初の形式は insert into の使用法に似ています。

replace select の 2 つ目の使用法も insert select に似ています。この使用法では、列名が一致している必要はありません。実際、MYSQL は select によって返される列名を気にしません。必要なのは列の位置です。たとえば、replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2; この例では、replace into を使用して、tb2 のすべてのデータを tb1 にインポートします。

3 番目の置換セットの使用方法は、更新セットの使用方法と似ています。「SET col_name = col_name + 1」などの割り当てを使用すると、右側の列名への参照は DEFAULT(col_name) として扱われます。したがって、この割り当ては SET col_name = DEFAULT(col_name) + 1 と同等です。

最初の 2 つの形式の方が頻繁に使用されます。キーワード「into」は省略できますが、意味がより直感的になるように「into」を追加した方がよいでしょう。さらに、値が指定されていない列については、MySQL によって自動的にデフォルト値が割り当てられます。

以下もご興味があるかもしれません:
  • MySQL での重複キー更新時の replace into と insert into の使用法と相違点の分析
  • MySQL での replace と replace 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の使用

<<:  1 つの記事で JSON (JavaScript Object Notation) を理解する

>>:  Dockerコンテナイメージからコードを復元する手順

推薦する

React 関数コンポーネントのパフォーマンス最適化のアイデアの詳細な説明

最適化のアイデア最適化には主に 2 つの方向があります。再レンダリングの回数を減らします。 Reac...

大規模なMySQLデータベース用のマスタースレーブシステムを構築するアイデアを共有する

今週は戦争のように忙しかったです。他人に操られているような気がします。毎日朝早く出勤して夜遅く帰り、...

VMware 仮想マシンでの CentOS7 ネットワーク構成 (ホストのワイヤレス インターネット アクセス)

CentOS7 システムを使用するのは今回が初めてで、ネットワーク構成を行う際に多くの問題が発生し...

MySQL 5.6 から 5.7 にアップグレードする際のマスター スレーブ遅延問題のトラブルシューティング

最近、Zabbix データベースを MySQL 5.6 から 5.7 にアップグレードしたときに、マ...

ナビゲーションデザインと情報アーキテクチャ

<br />ナビゲーションについて話すときは、ほとんどの場合、ナビゲーションがコンテンツ...

CSS scroll-snap スクロールイベント停止と要素位置検出の実装

1. スクロールスナップはフロントエンド開発者にとって必須のスキルですCSS スクロール スナップは...

Node.js ファイルのコピー、フォルダの作成、その他の関連操作

NodeJS は次のファイルをコピーします:通常、小さなファイルのコピー操作では、ストリーム パイプ...

Linux で PHP を 5.6 にアップグレードする実用的な方法

1: ターミナルに入ったらPHPのバージョンを確認する php -v出力は次のようになります。 PH...

CocosCreatorメッセージ配信メカニズムの詳細な説明

概要この記事は、ゲームビジネスアーキテクチャに関連するコンテンツの紹介から始まります。ゲームビジネス...

Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

目次1. Typescriptの紹介2. 設定ファイル webpack 設定3. プロジェクトに.t...

高並列処理 nginx サーバー向け Linux カーネル最適化構成の説明

デフォルトの Linux カーネル パラメータは最も一般的なシナリオに基づいており、高い同時アクセス...

Linux に ASPNET.Core3.0 ランタイムをインストールするためのサンプル コード

# 以下の例は x64 ビット ランタイム v3.0.0 用です mkdir /runtimes ...

MySQL データベースのインポートとエクスポートのデータ エラーの解決例の説明

データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...

電子署名を実装するWeChatミニプログラム

この記事では、WeChatミニプログラムで電子署名を実装するための具体的なコードを参考までに紹介しま...

CSS フロントエンドページレンダリング最適化属性 will-change の具体的な使用法

序文スクロールやサイズ変更などのスクロール イベントがトリガーされると、トリガーの頻度が非常に高くな...