> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 복합 키를 기반으로 행을 효율적으로 삽입하거나 업데이트하려면 어떻게 해야 합니까?

MySQL의 복합 키를 기반으로 행을 효율적으로 삽입하거나 업데이트하려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2024-12-29 18:36:11
원래의
376명이 탐색했습니다.

How Can I Efficiently Insert or Update Rows Based on a Composite Key in 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿