ホームページ > データベース > mysql チュートリアル > replace into と replace in MySQL の違いを分析してみましょう

replace into と replace in MySQL の違いを分析してみましょう

WBOY
リリース: 2022-08-22 19:55:05
転載
2076 人が閲覧しました

この記事では、MySQL の replace into と replace の違いを中心に、mysql に関する知識を紹介し、サンプルコードを交えて詳しく紹介していますので、皆様の学習や仕事の参考になると思います。 . 価値、それが皆さんのお役に立てば幸いです。

replace into と replace in MySQL の違いを分析してみましょう

推奨学習: mysql ビデオ チュートリアル

この記事は単なる出発点です。に置き換えて、前に置き換えます。複数のシナリオでテストした後、データを挿入するときに 2 つのシナリオの間に本質的な違いが見つかりません。もし詳細をご存知の方がいらっしゃいましたら、メッセージを残して教えていただければ幸いです。 ! !

0. ストーリーの背景

[テーブル構造]

CREATE TABLE `xtp_algo_white_list` (
  `strategy_type` int DEFAULT NULL,
  `user_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
  `status` int DEFAULT NULL,
  `destroy_at` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY `xtp_algo_white_list_UN` (`strategy_type`,`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin


# `strategy_type`,`user_name` 这两个是联合唯一索引,多关注后续需要用到!!!
ログイン後にコピー

##[要件:]

    テーブル内のアカウント 209133002266 のデータに従って、新しく生成されたデータの Strategy_type、status、destroy_at フィールドがユーザー 209133002266 のフィールドと一致するように、ユーザー 20220302001 を再挿入します。
  • update を使用して 1 つずつ更新することも可能ですが、速度が遅くなります。
  • replace into を使用する効果ははるかに高くなりますが、綿密な調査により、落とし穴もいくつかあることが判明しました。
1. replace into の使用方法

replace into xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;

# replace into 后面跟表格+需要插入的所有字段名(自动递增字段不用写)
# select 后面选择的字段,如果根据查询结果取值,则写字段名;如果是写死的,则直接写具体值即可
# 可以理解为,第一部分是插入表格的结构,第二部分是你查询的数据结果
ログイン後にコピー

2. インデックス作成時には、& に置換し、効果を置換する独自の方法があります。

step1: sql の最初の実行

replace into xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;
ログイン後にコピー
ログイン後にコピー

[実行後、クエリ結果は次のとおりです。]

#step2: sql の 2 回目の実行

2回目実行時は更新12行のデータが表示され、データ更新時に作成されるのに、初回は更新6行が表示されるのはなぜでしょうか? ? ?

1. SQL を実行するとき、replace into は実際には 2 つのステップで実行されるためです。最初のステップは、クエリ データを新しいデータに変換することです。 2 番目のステップでは、新しいデータがテーブル内にすでに同じ内容を持っている場合、そのデータは削除されます。同一の内容が存在しない場合は、新しいデータが直接挿入されます。

2. 初回実行時は新しいデータが生成されているので、2回目はそれを削除してから最新データを挿入し、最後に12行更新します。

step3 : 3回目のsql

# 此时执行的是replace 

replace xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;
ログイン後にコピー
実行の状況

    #観測された最終的な状況2回目のSQL実行時と同じです。
  • すでに新しいデータが存在する場合、replace into と replace は同じです
  • その後、20220302001 をすべて削除し、SQL を 1 回と 2 回実行して、replace into と replace の効果が同じであることを確認します
[概要:] 一意インデックスの制限がある場合、新しく追加されるデータが一意のインデックスによって制限される場合、データは 1 回だけ挿入されます。すでに存在する場合は、データが挿入されます。最初に削除してから挿入します。このとき、replace into は replace と同じ効果があります。

3. 一意のインデックスがない場合 - に置き換えて replace

strategy_type と user_name の結合一意のインデックスを削除し、ユーザー 20220302001 のデータをすべて削除します。最終的なテーブル構造は次のとおりです。

CREATE TABLE `xtp_algo_white_list` (
  `strategy_type` int DEFAULT NULL,
  `user_name` varchar(64) COLLATE utf8_bin DEFAULT NULL,
  `status` int DEFAULT NULL,
  `destroy_at` datetime DEFAULT NULL,
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
ログイン後にコピー

1) replace 関数の具体的な状況

step1: 次の対応する SQL を置換して実行します:

replace xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;
ログイン後にコピー

#step2: SQL に対応する置換を再度実行します:

    sqlに相当する2回目のreplaceを実行すると、一意インデックスの制限がないため、元のデータは変化しません。 6 つの新しいデータが再生成されました。
  • 上記のSQLを後から実行するとデータは増え続けます
2) .replace into functionの具体的な状況

実行前にcleanしてくださいdata 、20220302001

のデータをすべて削除します。step1: 次の置換を対応する sql:

に実行します。

replace into xtp_algo_white_list (`strategy_type`, `user_name`, `status`, `destroy_at`)
select strategy_type ,20220302001, status, destroy_at from xtp_algo_white_list xawl where xawl.user_name = 209133002266;
ログイン後にコピー
ログイン後にコピー

step2:再次执行replace into 对应sql:

最终发现,没有唯一索引的时候,replace into 与replace 居然一摸一样的效果,都是继续增加数据。

通过以上分析,没看出replace into 与replace 具体有啥区别????有谁知道呢?

4.replace的用法

  • 单独replace的作用是替换字段中某数值的显示效果。可以数值中的部分替换、也可以全部替换。
  • 如下表格,将user_name的字段,20220302改为"A_20220303"显示,并且新字段叫做new_name显示

select *, replace(user_name,20220302,'A_20220303') as "new_name" from xtp_algo_white_list where user_name = 20220302001;
ログイン後にコピー

推荐学习:mysql视频教程

以上がreplace into と replace in MySQL の違いを分析してみましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート