이 글은 mysql에 대한 관련 지식을 제공하며, MySQL에서의 대체와 대체의 차이점에 대한 자세한 설명을 주로 소개합니다. 이 글은 모든 사람의 학습이나 작업에 특정 참조 학습 가치가 있는 샘플 코드를 통해 자세히 소개합니다. 그것은 모두에게 도움이 됩니다.
추천 학습: mysql 비디오 튜토리얼
이 기사는 단지 소개일 뿐입니다. 나는 이전에 교체와 교체의 차이점에 주의를 기울인 적이 없습니다. 여러 시나리오에서 테스트한 후 데이터를 삽입할 때 둘 사이의 본질적인 차이점을 찾을 수 없습니까? 혹시 자세한 내용 아시는 분 계시면 메시지 남겨주시면 정말 감사하겠습니다! ! !
[테이블 구조]
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 后面选择的字段,如果根据查询结果取值,则写字段名;如果是写死的,则直接写具体值即可 # 可以理解为,第一部分是插入表格的结构,第二部分是你查询的数据结果
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;
[요약:] 고유 인덱스 제한이 있는 경우 새로 추가된 데이터가 고유 인덱스에 의해 제한되는 경우 해당 데이터는 한 번만 삽입되며, 이미 존재하는 경우 먼저 삭제한 후 삽입됩니다. 이때, 바꾸기는 바꾸기와 동일한 효과를 갖습니다.
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
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에 해당하는 교체를 다시 실행합니다. :
의 구체적인 상황
실행 전 먼저 데이터를 정리하고 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 具体有啥区别????有谁知道呢?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!