SQL MySQL의 구덩이 아버지 작업의 논리를 교체하지 마십시오

로 교체하고 중복 키 차이에 삽입
사용을 대체

충돌이 나머지 열 기본 값을 삽입하는 것이 일치하지 않는 경우에는
추가 업데이트 이후 키 충돌, 충돌 열을 교체 할 때 나머지 열 기본값
Com_replace이 추가됩니다 1
Innodb_rows_updated 1을 추가합니다

중복 키 사용에 ...에 삽입

충돌하지 않는 삽입, 나머지 열 기본값에 해당
키 충돌 만 해당 필드의 값을 업데이트.
1 Com_insert 추가됩니다
Innodb_rows_inserted 1 증가

실험은 보여
테이블 구조

create table helei1(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL DEFAULT '',
age tinyint(3) unsigned NOT NULL default 0,
PRIMARY KEY(id),
UNIQUE KEY uk_name (name)
)
ENGINE=innodb AUTO_INCREMENT=1 
DEFAULT CHARSET=utf8;
</br>
复制代码

테이블 데이터

[email protected] (helei)> helei1로부터 SELECT *]
+ ---- + ---- + ----------- +
| 상술 ID | 이름 | 나이 |
+ ---- + ----- + ----------- +
| 1 | 그는 레이 | 26 |
| 2 | 샤오 밍 | 28 |
| 3 | 빨간색 | 26 |
+ ---- + - + + --------- -----
3 SET 행 (0.00 초)

사용에 교체

[email protected] (helei)>로 교체 helei1 (명) 값 ( '贺磊');
쿼리 OK 영향을 2 행 (0.00 초)

[email protected] (helei)> * helei1으로부터 선택;
+ ---- + ----------- + ----- +
| ID | 이름 | 나이 |
+ ---- + ----------- + ----- +
| 2 | 小明| 28 |
| 3 | 小红| 26 |
| 4 | 贺磊| 0 |
+ ---- + ----------- + ---- +
세트의 3 행 (0.00 초)
[email protected] (helei)> '(helei1 (명) 값으로 대체爱璇');
쿼리 OK 영향 1 행 (0.00 초)

[email protected] (helei)> helei1로부터 SELECT *]
+ ---- + ---- + ----------- +
| 상술 ID | 이름 | 나이 |
+ ---- + ----- + ----------- +
| 2 | 밥 | 28 |
|. 3 | 앨리스 | 26 인 |
|. 4 | 레이 그는 | 0 |
|. 5 | 사랑 법사 | 0 |
----- ---- + + + + -----------
세트의 4 행 (0.00 초)

사용을 대체
키와 충돌, 동등한 삽입, 나머지 열 기본 값으로 대체하지 않을 때
추가 업데이트 이후 키 충돌, 충돌 열을, 나머지 열 기본값 교체 할 때

중복 키에 ...에 삽입 :

[email protected] (helei)> helei1로부터 SELECT *]
+ ---- + ---- + ----------- +
| 상술 ID | 이름 | 나이 |
+ ---- + ----- + ----------- +
| 2 | 밥 | 28 |
|. 3 | 앨리스 | 26 인 |
|. 4 | 레이 그는 | 0 |
|. 5 | 사랑 법사 | 0 |
----- ---- + + + + -----------
세트의 4 행 (0.00 초)

[email protected] (helei)> helei1에 삽입 (이름, 나이) 값 ( '贺磊', 0) 중복 키 업데이트 연령 = 100;
쿼리 OK 영향을 2 행 (0.00 초)

[email protected] (helei)> helei1로부터 SELECT *]
+ ---- + ---- + ----------- +
| 상술 ID | 이름 | 나이 |
+ ---- + ----- + ----------- +
| 2 | 밥 | 28 |
|. 3 | 앨리스 | 26 인 |
|. 4 | 레이 그는 | 100 |
|. 5 | 사랑 법사 | 0 |
----- ---- + + + + -----------
세트의 4 행 (0.00 초)

[email protected] (helei)> helei1로부터 SELECT *]
+ ---- + ---- + ----------- +
| 상술 ID | 이름 | 나이 |
+ ---- + ----- + ----------- +
| 2 | 밥 | 28 |
|. 3 | 앨리스 | 26 인 |
|. 4 | 레이 그는 | 100 |
|. 5 | 사랑 법사 | 0 |
----- ---- + + + + -----------
세트의 4 행 (0.00 초)

[email protected] (helei)> helei1에 삽입 (이름) 값 ( '爱璇') 중복 키 업데이트 나이 = 120;
쿼리 OK 영향 2 행 (0.01 초)

[email protected] (helei)> helei1로부터 SELECT *]
+ ---- + ---- + ----------- +
| 상술 ID | 이름 | 나이 |
+ ---- + ----- + ----------- +
| 2 | 밥 | 28 |
|. 3 | 앨리스 | 26 인 |
|. 4 | 레이 그는 | 100 |
|. 5 | 사랑 법사 | 120 |
----- ---- + + + + -----------
세트의 4 행 (0.00 초)

( '不存在') 중복 키 업데이트 연령 = 80에 [email protected] (helei)> helei1에 삽입 (이름) 값;
쿼리 OK 영향 1 행 (0.00 초)

[email protected] (helei)> helei1로부터 SELECT *]
+ ---- + ---- + ----------- +
| 상술 ID | 이름 | 나이 |
+ ---- + ----- + ----------- +
| 2 | 밥 | 28 |
|. 3 | 앨리스 | 26 인 |
|. 4 | 레이 그는 | 100 |
|. 5 | 사랑 법사 | 120 |
| 8 | 부재 | 0 |
+ ---- + ---- + ----------- +
세트의 5 행 (0.00 초)

요약
충돌이 키 먼저 할 수있는 삭제 조작에 대응 발견 된 경우 외부 테이블이있는 경우 삽입 작업이 지정되지 않은 열 기본값은,이, 키 생성 증가의 변화로 이어질 것입니다 않습니다, 이러한 사용으로 대체 비즈니스 로직에 따라 기본 키 또는 키 예외가 발생합니다. 중복 키에에 ... 삽입을 사용하는 것이 좋습니다. 준비 시간이 매우 짧고, 텍스트가 불가피 오류 또는 부정확 한 것 때문에 부적절 독자의 비판을 촉구한다.

HTTPS : //juejin.im/post/5d020df8e51d45775746b929 재현

추천

출처blog.csdn.net/weixin_34099526/article/details/93181798