この記事では、MySQL の replace into と replace の違いを中心に、mysql に関する知識を紹介し、サンプルコードを交えて詳しく紹介していますので、皆様の学習や仕事の参考になると思います。 . 価値、それが皆さんのお役に立てば幸いです。
推奨学習: mysql ビデオ チュートリアル
この記事は単なる出発点です。に置き換えて、前に置き換えます。複数のシナリオでテストした後、データを挿入するときに 2 つのシナリオの間に本質的な違いが見つかりません。もし詳細をご存知の方がいらっしゃいましたら、メッセージを残して教えていただければ幸いです。 ! !
[テーブル構造]
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` 这两个是联合唯一索引,多关注后续需要用到!!!##[要件:]
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 后面选择的字段,如果根据查询结果取值,则写字段名;如果是写死的,则直接写具体值即可 # 可以理解为,第一部分是插入表格的结构,第二部分是你查询的数据结果
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;実行の状況
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_bin1) 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 に対応する置換を再度実行します:
に実行します。
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 具体有啥区别????有谁知道呢?
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 サイトの他の関連記事を参照してください。