집 >데이터 베이스 >MySQL 튜토리얼 >MySQL의 복합 키를 기반으로 행을 효율적으로 삽입하거나 업데이트하려면 어떻게 해야 합니까?
이중 조건으로 INSERT INTO 또는 UPDATE
이름과 날짜로 식별되는 여러 항목의 데이터를 추적하는 테이블을 생각해 보세요. 매일 이름 값의 한정된 목록에 대한 미래 날짜가 포함된 새 행이 생성됩니다. 목표는 존재하지 않는 경우 새 행을 삽입하고 존재하는 경우 기존 행을 업데이트하는 것입니다.
일반적인 솔루션은 조건을 확인하는 저장 프로시저일 수 있지만 이는 다음과 같은 이유로 실행 가능하지 않습니다. 데이터가 다른 언어에서 푸시됩니다.
해결책: 중복 키에 삽입 업데이트
MySQL 기능인 INSERT ON DUPLICATE KEY UPDATE는 이 문제에 대한 우아한 솔루션을 제공합니다. 이를 사용하면 고유 키나 인덱스를 기반으로 존재하지 않는 경우 새 행을 삽입하거나, 존재하는 경우 기존 행을 업데이트할 수 있습니다.
이 경우 (이름, 날짜)이면 충분합니다. 삽입을 시도하면 MySQL은 이 고유 키로 인한 충돌을 감지하고 대신 업데이트를 수행합니다.
예:
CREATE TABLE myThing ( id INT AUTO_INCREMENT PRIMARY KEY, name INT NOT NULL, values1 INT NOT NULL, values2 INT NOT NULL, dates DATE NOT NULL, UNIQUE KEY (name, dates) ); INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1;
동일한 (이름, 날짜) 값을 사용하면 값2 열을 업데이트할 수 있습니다. 따라서:
INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1; INSERT INTO myThing (name, values1, values2, dates) VALUES (777, 1, 1, '2015-07-11') ON DUPLICATE KEY UPDATE values2 = values2 + 1;
결과:
SELECT * FROM myThing; +----+------+---------+---------+------------+ | id | name | values1 | values2 | dates | +----+------+---------+---------+------------+ | 1 | 777 | 1 | 3 | 2015-07-11 | +----+------+---------+---------+------------+
보시다시피 INSERT ON DUPLICATE KEY UPDATE 절은 기존 행의 value2 열을 효과적으로 업데이트합니다.
위 내용은 MySQL의 복합 키를 기반으로 행을 효율적으로 삽입하거나 업데이트하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!