MySQL 기록 이 존재 하지 않 을 때 삽입, 기록 이 존재 할 때 업데이트

http://apps.hi.baidu.com/share/detail/38933944
MySQL 은 기록 이 존재 하지 않 을 때 삽입 하고 기록 이 존재 할 때 인터넷 을 업데이트 하 는 데 기본적으로 세 가지 해결 방법 이 있다.
첫 번 째 종류:
예시 1: 여러 개의 기록 삽입
메 인 키 가 client 라 고 가정 합 니 다.id 의 clients 표, 아래 문장 을 사용 할 수 있 습 니 다:
INSERT
INTO
clients
(
client_id
,
client_name
,
client_type
)
SELECT
supplier_id
,
supplier_name
,
'
advertising
'
FROM
suppliers
WHERE
not
exists
(
select
*
from
clients
where
clients
.
client_id
=
suppliers
.
supplier_id
)
;
예시 1: 단일 기록 삽입
INSERT
INTO
clients
(
client_id
,
client_name
,
client_type
)
SELECT
10345
,
'
IBM
'
,
'
advertising
'
FROM
dual
WHERE
not
exists
(
select
*
from
clients
where
clients
.
client_id
=
10345
)
;
dual 을 표 이름 으로 사용 하면 selection 문 뒤에 필드 를 삽입 할 값 을 직접 따라 갈 수 있 습 니 다. 비록 이 값 이 현재 표 에 존재 하지 않 더 라 도.
두 번 째:
INSERT 에서 ON DUPLICATE KEY UPDATE 사용

ON DUPLICATE KEY UPDATEUNIQUE PRIMARY KEYUPDATE。 , a UNIQUE1, :

mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)
      ->ON DUPLICATE KEY UPDATE c=c+1;

 
mysql>UPDATE table SET c=c+1 WHERE a=1;
줄 이 새 기록 으로 삽입 되면 영향 을 받 는 줄 의 값 은 1 입 니 다.기 존 기록 이 업데이트 되면 영향 을 받 는 줄 의 값 은 2 입 니 다.
설명: 열 b 도 유일한 열 이 라면 INSERT 는 이 UPDATE 문장 과 비슷 합 니 다.
mysql>UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
a = 1 OR b = 2 가 여러 줄 방향 과 일치 하면 한 줄 만 업 데 이 트 됩 니 다.일반적으로, 당신 은 가능 한 한 여러 개의 유일한 키 워드 를 가 진 시계 에 ON DUPLICATE KEY 자 구 를 사용 하 는 것 을 피해 야 합 니 다.
UPDATE 자구 에서 VALUES (col name) 함 수 를 사용 하여 INSERT... UPDATE 문장의 INSERT 부분 에서 열 값 을 참조 할 수 있 습 니 다.다시 말 해 중복 키워드 충돌 이 발생 하지 않 았 다 면 UPDATE 자구 의 VALUES (col name) 는 삽 입 된 col 을 참조 할 수 있 습 니 다.name 의 값.이 함 수 는 여러 줄 의 삽입 에 특히 적용 된다.VALUES () 함 수 는 INSERT... UPDATE 구문 에서 만 의미 가 있 고 다른 때 는 NULL 로 돌아 갑 니 다.
예시:
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
      ->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
이 문장 은 아래 두 문장의 작용 과 같다.
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)
      ->ON DUPLICATE KEY UPDATE c=3;
mysql>INSERT INTO table (a,b,c) VALUES (4,5,6)
      ->ON DUPLICATE KEY UPDATE c=9;
ON DUPLICATE KEY UPDATE 를 사용 할 때 DELAYED 옵션 은 무 시 됩 니 다.
세 번 째:
REPLACE 문장
우 리 는 데이터 베 이 스 를 사용 할 때 이런 상황 을 자주 만 날 수 있다.한 표 가 한 필드 에 유일한 색인 을 만 들 었 다 면, 이 표 에 존재 하 는 키 값 을 사용 하여 기록 을 삽입 하면 홈 키 가 충돌 하 는 오 류 를 던 집 니 다.물론 우 리 는 새로운 기록 값 으로 원래 의 기록 값 을 덮어 쓰 려 고 할 수도 있다.전통 적 인 방법 을 사용 하려 면 먼저 DELETE 문 구 를 사용 하여 원래 의 기록 을 삭제 한 다음 에 INSERT 를 사용 하여 새로운 기록 을 삽입 해 야 한다.MySQL 에서 우리 에 게 새로운 해결 방안 을 제 공 했 는데 이것 이 바로 REPLACE 문구 입 니 다.REPLACE 를 사용 하여 기록 을 삽입 할 때 반복 되 지 않 으 면 REPLACE 는 INSERT 의 기능 과 마찬가지 로 중복 기록 이 있 으 면 REPLACE 는 새 기록 값 으로 원래 기록 값 을 교체 합 니 다.REPLACE 를 사용 하 는 가장 큰 장점 은 DELETE 와 INSERT 를 하나 로 합 쳐 하나의 원자 조작 을 형성 할 수 있다 는 것 이다.이렇게 하면 DELETE 와 INSERT 를 동시에 사용 할 때 사 무 를 추가 하 는 등 복잡 한 조작 을 고려 할 필요 가 없다.REPLACE 를 사용 할 때 표 에 유일한 색인 이 있어 야 하 며, 이 색인 이 있 는 필드 는 빈 값 을 허용 할 수 없습니다. 그렇지 않 으 면 REPLACE 는 INSERT 와 완전히 같 습 니 다.REPLACE 를 실행 한 후에 시스템 은 영향 을 주 는 줄 수 를 되 돌려 주 었 습 니 다. 1 을 되 돌려 주면 표 에 중복 되 는 기록 이 없다 는 것 을 설명 합 니 다. 2 를 되 돌려 주면 중복 기록 이 있다 는 것 을 설명 합 니 다. 시스템 은 자동 으로 DELETE 를 호출 하여 이 기록 을 삭제 한 다음 에 기록 은 INSERT 로 이 기록 을 삽입 합 니 다.돌아 오 는 값 이 2 보다 크 면 여러 개의 유일한 색인 이 있 고 여러 개의 기록 이 삭제 되 고 삽입 되 었 다 는 것 을 의미한다.REPLACE 의 문법 은 INSERT 와 매우 비슷 하 다. 예 를 들 어 아래 의 REPLACE 문 구 는 기록 을 삽입 하거나 업데이트 하 는 것 이다.사용자 (id, name, age) VALUES (123, '조본산', 50);여러 개의 기록 삽입: REPLACE INTO users (id, name, age) VALUES (123, '조본산', 50), (134, 'Mary', 15);REPLACE 도 SET 문 구 를 사용 할 수 있 습 니 다. REPLACE INTO users SET id = 123, name = '조본산', age = 50;위 에서 언급 한 REPLACE 가 3 개 이상 의 기록 에 영향 을 미 칠 수 있다 는 것 은 표 에 하나 이상 의 유일한 색인 이 있 기 때문이다.이 경우 REPLACE 는 모든 유일한 색인 을 고려 하고 모든 색인 에 대응 하 는 중복 기록 을 삭제 한 다음 새 기록 을 삽입 합 니 다.table 1 표 가 있다 고 가정 하면 3 개의 필드 a, b, c 가 있 습 니 다.그것들 은 모두 유일한 색인 을 가지 고 있다.CREATE TABLE table1(a INT NOT NULL UNIQUE,b INT NOT NULL UNIQUE,c INT NOT NULL UNIQUE); table 1 에 3 개의 기록 이 있다 고 가정 합 니 다. a. b. c. 1, 1, 2, 2, 3, 3. 다음은 REPLACE 문 구 를 사용 하여 table 1 에 기록 을 삽입 합 니 다.REPLACE INTO table1(a, b, c) VALUES(1,2,3); 돌아 온 결 과 는 다음 과 같 습 니 다. Query OK, 4 rows affected (0.00 sec) 가 table 1 에 기 록 된 기록 은 다음 과 같 습 니 다. REPLACE 는 기 존의 3 개의 기록 을 모두 삭제 한 다음 (1, 2, 3) 을 삽입 합 니 다.
        ,          (    ),                 。

1)insert , 。REPLACE , 。
2) ( ), 2 2 ( ),
insert ,REPLACE , 。
, , 。

출처:http://hi.baidu.com/xiaoxiaolq/blog/item/1a2753166a7bcc4021a4e924.html
 
 
 
 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
두 번 째 방법
INSERT INTO ir(`name`) VALUES('r') ON DUPLICATE KEY UPDATE `name` = `dupli`;
오류 보고:
Query : INSERT INTO ir(`name`) VALUES('r') ON DUPLICATE KEY UPDATE `name` = `dupli` Error Code : 1054 Unknown column 'dupli' in 'field list' Execution Time : 00:00:00:000 Transfer Time  : 00:00:00:000 Total Time     : 00:00:00:000 ---------------------------------------------------
메모: update 후의 값 이 중복 되면 가방 위의 오류 가 발생 합 니 다.
 

좋은 웹페이지 즐겨찾기