이중 조건으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!