>  기사  >  데이터 베이스  >  MySQL에서 대체(replace into)와 대체(replace into)의 차이점을 분석해 보겠습니다.

MySQL에서 대체(replace into)와 대체(replace into)의 차이점을 분석해 보겠습니다.

WBOY
WBOY앞으로
2022-08-22 17:25:332003검색

이 글은 mysql에 대한 관련 지식을 제공하며, MySQL에서의 대체와 대체의 차이점에 대한 자세한 설명을 주로 소개합니다. 이 글은 모든 사람의 학습이나 작업에 특정 참조 학습 가치가 있는 샘플 코드를 통해 자세히 소개합니다. 그것은 모두에게 도움이 됩니다.

MySQL에서 대체(replace into)와 대체(replace into)의 차이점을 분석해 보겠습니다.

추천 학습: mysql 비디오 튜토리얼

이 기사는 단지 소개일 뿐입니다. 나는 이전에 교체와 교체의 차이점에 주의를 기울인 적이 없습니다. 여러 시나리오에서 테스트한 후 데이터를 삽입할 때 둘 사이의 본질적인 차이점을 찾을 수 없습니까? 혹시 자세한 내용 아시는 분 계시면 메시지 남겨주시면 정말 감사하겠습니다! ! !

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가 되도록 사용자 20220302001을 다시 삽입합니다. 새로 생성된 data & destroy_at 필드는 사용자 209133002266의 필드와 일치합니다.
  • 업데이트를 사용하여 하나씩 업데이트하는 것도 가능하지만 속도가 느립니다.
  • replace into를 사용하면 효과가 훨씬 높아지지만 심층 조사에 따르면 몇 가지 함정도 있는 것으로 나타났습니다

1. replacement 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를 사용하는 방법 —replace into & 그리고 교체 효과

step1 : 1단계 sql을 1회 실행한 상황

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을 두 번째 실행하는 상황

두 번째 실행 시 업데이트된 12행의 데이터가 표시되고 생성된 데이터가 업데이트되는데 처음으로 업데이트된 6행이 표시되는 이유는 무엇인가요? ? ?

1.SQL을 실행할 때 실제로는 두 단계로 교체가 수행되기 때문입니다. 첫 번째 단계는 쿼리 데이터를 새 데이터로 변환하는 것입니다. 두 번째 단계에서는 새 데이터에 이미 테이블에 동일한 내용이 있으면 삭제됩니다. 동일한 내용이 없으면 새로운 데이터가 바로 삽입됩니다.

2. 위의 내용을 처음 실행하면 새로운 데이터가 생성되기 때문에 두 번째 실행 시에는 가장 최근의 데이터가 삽입됩니다.

step3: 세 번째 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;

  • 최종 상황은 두 번째 SQL 실행과 동일합니다.
  • 새 데이터가 이미 존재하는 경우에는 바꾸기와 바꾸기가 동일합니다.
  • 이후 20220302001을 모두 삭제하고 SQL을 한 번, 두 번 실행하여 바꾸기와 바꾸기의 효과가 동일한 것을 확인합니다

[요약:] 고유 인덱스 제한이 있는 경우 새로 추가된 데이터가 고유 인덱스에 의해 제한되는 경우 해당 데이터는 한 번만 삽입되며, 이미 존재하는 경우 먼저 삭제한 후 삽입됩니다. 이때, 바꾸기는 바꾸기와 동일한 효과를 갖습니다.

3. 고유 인덱스가 없는 경우 - 교체 및 교체

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) 교체 함수의 구체적인 상황

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;

2단계: sql에 해당하는 교체를 다시 실행합니다. :

  • replace의 두 번째 실행은 sql에 해당합니다. 고유 인덱스 제한이 없으므로 원본 데이터는 변경되지 않습니다. 6개의 새로운 데이터가 재생성되었습니다.
  • 나중에 위의 SQL을 실행하면 데이터가 계속해서 늘어납니다

2) .replace into function

의 구체적인 상황

실행 전 먼저 데이터를 정리하고 20220302001

🎜의 데이터를 모두 삭제하세요. 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视频教程

위 내용은 MySQL에서 대체(replace into)와 대체(replace into)의 차이점을 분석해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제