mysql insert 의 몇 가지 동작(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE)

3651 단어 mysqlinsert
INSERT 문법 INSERT[LOWPRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr,...]또는:INSERT[LOWPRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr,...]또는:INSERT[LOWPRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr,...]1.DELAYED 의 사용 지연 삽입 작업 DELAYED 조절 자 는 INSERT 와 REPLACE 문 구 를 사용 합 니 다.DELAYED 삽입 작업 이 도 착 했 을 때 서버 는 데이터 줄 을 하나의 대기 열 에 넣 고 클 라 이언 트 에 게 상태 정 보 를 즉시 되 돌려 줍 니 다.그러면 클 라 이언 트 는 데이터 시트 가 진정 으로 기록 에 삽입 되 기 전에 계속 작업 할 수 있 습 니 다.읽 는 사람 이 이 데이터 시트 에서 데 이 터 를 읽 으 면 읽 는 사람 이 없 을 때 까지 대기 열 에 있 는 데 이 터 를 유지 합 니 다.이 어 서버 는 지연 데이터 줄(delayed-row)대기 열 에 있 는 데이터 줄 을 삽입 하기 시작 했다.삽입 작업 과 동시에 서버 는 새로운 읽 기 요청 이 도착 하고 기다 리 고 있 는 지 확인 해 야 합 니 다.있 으 면 지연 데이터 줄 대기 열 이 걸 려 서 읽 는 사람 이 계속 작업 할 수 있 습 니 다.읽 는 사람 이 없 을 때 서버 는 지연 되 는 데이터 줄 을 다시 삽입 하기 시작 합 니 다.이 과정 은 대열 이 비 었 을 때 까지 계속 진행 되 었 다.몇 가지 주의사항:/INSERT DELAYED 는 지정 한 값 목록 의 INSERT 문구 에 만 사용 해 야 합 니 다.서버 는 INSERT DELAYED...SELECT 문 구 를 위 한 DELAYED 를 무시 합 니 다.・서버 는 INSERT DELAYED...ON DUPLICATE UPDATE 문구 에 사용 되 는 DELAYED 를 무시 합 니 다.・줄 이 삽입 되 기 전,문장 이 바로 돌아 오기 때문에,LAST 를 사용 할 수 없습니다.INSERT_ID()로 AUTO 획득INCREMENT 값.AUTO_INCREMENT 값 은 구문 으로 생 성 될 수 있 습 니 다.・SELECT 문구 에 대해 서 는 이 줄 들 이 확실히 삽 입 될 때 까지 DELAYED 줄 이 보이 지 않 습 니 다.·DELAYED 는 종속 복제 서버 에서 무시 되 었 습 니 다.DELAYED 는 종속 서버 에서 주 서버 와 다른 데 이 터 를 생 성하 지 않 기 때 문 입 니 다.현재 대기 열 에 있 는 각 줄 은 표 에 삽 입 될 때 까지 메모리 에 만 저 장 됩 니 다.이것 은 my sqld(예 를 들 어 kill-9 사용)를 강제로 중단 하거나 my sqld 가 예상 치 못 하 게 멈 추 면 디스크 에 기록 되 지 않 은 모든 줄 을 잃 어 버 린 다 는 것 을 의미 합 니 다.2.IGNORE 의 사용 IGNORE 는 MySQL 이 표준 SQL 에 비해 확 장 된 것 입 니 다.새 표 에 중복 키워드 가 있 거나 STRCT 모드 가 시 작 된 후 경고 가 나타 나 면 IGNORE 를 사용 하여 ALTER TABLE 의 실행 을 제어 합 니 다.IGNORE 가 지정 되 지 않 으 면 중복 키워드 오류 가 발생 했 을 때 복사 작업 이 포기 되 고 이전 단계 로 돌아 갑 니 다.IGNORE 를 지정 하면 중 복 된 키워드 가 있 는 줄 에 대해 서 는 첫 줄 만 사용 하고,다른 충돌 하 는 줄 은 삭 제 됩 니 다.또한 오류 값 을 수정 하여 가능 한 한 정확 한 값 에 접근 하도록 한다.insert ignore into tb(...)value(...)는 존재 하 는 지 확인 하지 않 고 무시 합 니 다.없 으 면 3,ON DUPLICATE KEY UPDATE 를 추가 합 니 다.ON DUPLICATE KEY UPDATE 를 지정 하고 줄 을 삽입 하면 UNIQUE 색인 이나 PRIMARY KEY 에 중복 값 이 나타 나 면 이전 줄 UPDATE 를 실행 합 니 다.예 를 들 어 열 a 가 UNIQUE 로 정의 되 고 값 1 을 포함 하면 다음 두 문 구 는 똑 같은 효 과 를 가진다.my sql>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(colname)함 수 는 INSERT...UPDATE 문장의 INSERT 부분 에서 열 값 을 참조 합 니 다.반복 키워드 충돌 이 발생 하지 않 았 다 면 UPDATE 자구 의 VALUES(colname)삽 입 된 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 옵션 은 무 시 됩 니 다.결론:DELAYED 는 빠 른 삽입 으로 실효 성에 관심 이 없고 삽입 성능 을 향상 시킨다.ignore 는 메 인 키 에 대응 하 는 기록 이 존재 하지 않 고 추가 되 지 않 으 면 무시 합 니 다.ON DUPLICATE KEY UPDATE 가 추 가 될 때 동작 하 며,비 메 인 키 열 에 주목 하고,ignore 와 의 차 이 를 주의 합 니 다.있 으 면 지정 한 열 을 업데이트 하고 없 으 면 추가 합 니 다.

좋은 웹페이지 즐겨찾기