디케이
[MySQL] INSERT UNIQUE중복 체크 ON DUPLICATE KEY UPDATE 본문
반응형
UNIQUE 지정
테이블 생성 후 , 중복 저장을 막기 위해 중복 체크 할 column에 unique 키를 등록
데이터 베이스에서 대량의 데이터를 등록할 경우, 키 값이 있음에도 INSERT문을 실행 하게 되면 에러가 발생한다.
해결방법으로는 테이블에 있는 데이터를 모두 삭제 한 후 다시 집어넣는 방법 이지만 번거롭고 위험요소 역시 발생한다.
따라서, 키 값이 있는 경우 INSERT 대신 UPDATE를 사용하면 번거로운 일과 에러를 줄일 수 있다.
TABLE 셋팅 예제
CREATE TABLE attr(
id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
updateDate DATETIME NOT NULL,
relTypeCode CHAR(20) NOT NULL,
relId INT(10) UNSIGNED NOT NULL,
typeCode CHAR(30) NOT NULL,
type2Code CHAR(30) NOT NULL,
`value` TEXT NOT NULL,
expireDate DATETIME NULL
);
# 변수찾는 속도 최적화
ALTER TABLE attr ADD UNIQUE INDEX (relTypeCode,relId, typeCode, type2Code);
# 특정 조건을 만족하는 회원 또는 게시물(기타데이터)를 빠르게 찾기 위해
ALTER TABLE attr ADD INDEX (relTypeCode, typeCode, type2Code);
ON DUPLICATE KEY UPDATE 사용
INSERT INTO attr (regDate, updateDate, expireDate, `relTypeCode`, `relId`, `typeCode`, `type2Code`, `value`)
VALUES (NOW(), NOW(),NULL, 'member', 27, 'extra', 'isUsingTempPassword', 1)
ON DUPLICATE KEY UPDATE
updateDate = NOW()
, `value` = 1;
attr 이라는 테이블에 relTypeCode,relId, typeCode, type2Code 칼럼 값을 중복 검사 후 중복 값이 있다면 value 칼럼에 값을 변경 해주는 예제이다.
반응형