존재하는 경우 레코드 업데이트 그렇지 않으면 MySQL 테이블에 삽입

존재하는 경우 레코드 업데이트 그렇지 않으면 MySQL 테이블에 삽입

데이터베이스 관리자는 때때로 MySQL 테이블에 레코드를 추가하거나 레코드가 정기적으로 있는 경우 업데이트해야 할 수 있습니다. MySQL은 사용자가 이미 존재하거나 PRIMARY KEY 값이 중복된 레코드를 삽입하려고 하면 경고를 보냅니다.

이 문서에서는 이 실수를 수정하고 더 나은 결과를 얻는 데 사용할 수 있는 방법에 대해 설명합니다.

존재하는 경우 레코드 업데이트 그렇지 않으면 MySQL 테이블에 삽입

행이 실제로 새롭거나 이미 존재하는지 확인한 후 행을 삽입해야 하는 경우 MySQL은 몇 가지 유용한 명령문을 제공합니다.

레코드가 존재하는 경우 REPLACE INTO를 사용하여 레코드 업데이트 그렇지 않으면 MySQL 테이블에 삽입

한 가지 방법은 이전에 설명한 것처럼 중복된 UNIQUE 또는 PRIMARY KEY 값으로 인해 INSERT 명령이 실패할 때 행을 진정으로 바꾸려는 경우 REPLACE 문을 사용하는 것입니다.

REPLACE INTO 문을 사용할 때 실행된 각 명령에 대해 두 가지 가능한 결과가 있습니다.

  1. 원하는 값이 있는 데이터 행을 찾을 수 없기 때문에 일반적인 INSERT 문이 실행됩니다.
  2. 일치하는 데이터 행이 발견되면 일반적인 DELETE 문을 사용하여 기존 행이 지워지고 표준 INSERT가 수행됩니다.

예를 들어 id, department, employee_namejoining_year 열이 있는 employees 테이블이 있다고 가정합니다. departmentjoining_yearid = 101 레코드를 다시 원래 Operations 레코드로 변경하기로 결정했습니다.

-- Before update
SELECT * from employees where id = 101;
REPLACE INTO employees
    (id, department, employee_name, joining_year)
VALUES
    (101, 'Operations', 'John Doe', 2013);
-- After update
SELECT * from employees where id = 101;

MySQL과 호환되는 모든 브라우저에서 위의 코드 줄을 실행합니다. 다음과 같은 결과가 표시됩니다.

출력:

-- Before update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Technology | John Doe      |       2017     |
+----+------------+---------------+----------------+

Query OK, 2 rows affected (0.01 sec)

-- After update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Operations | John Doe      |       2013     |
+----+------------+---------------+----------------+

이 예에서는 하나의 항목만 변경했지만 이전 레코드를 삭제한 다음 새 행을 삽입하여 그 자리를 차지하기 때문에 두 행이 영향을 받은 것으로 결과가 표시됩니다.

INSERT ... ON DUPLICATE KEY UPDATE를 사용하여 레코드가 존재하는 경우 업데이트하고 그렇지 않으면 MySQL 테이블에 삽입

중복된 UNIQUE 또는 PRIMARY KEY 값이 있을 수 있는 행에 삽입하기 위한 대체 접근 방식으로 INSERT ... ON DUPLICATE KEY UPDATE 문 및 절을 사용할 수 있습니다.

INSERT 또는 UPDATE 명령만 실행하고 DELETE를 사용하지 않음으로써 INSERT... ON DUPLICATE KEY UPDATE를 사용하는 것은 REPLACE와 달리 비파괴적입니다. 필요할 때 실행되는 명령.

예를 들어 id, department, employee_namejoining_year 열이 있는 employees 테이블이 있다고 가정합니다. departmentjoining_yearid = 101 레코드를 다시 원래 Operations 레코드로 변경하기로 결정했습니다.

이제 새 ON DUPLICATE KEY UPDATE 절을 원래 INSERT 문에 추가할 수 있습니다.

-- Before update
SELECT * from employees where id = 101;
SET @id = 101,
    @department = 'Operations',
    @employee_name = 'John Doe',
    @joining_year = 2013;
INSERT INTO employees
    (id, department, employee_name, joining_year)
VALUES
    (@id, @department, @employee_name, @joining_year)
ON DUPLICATE KEY UPDATE
    department = @department,
    employee_name = @employee_name,
    joining_year = @joining_year;
-- After update
SELECT * from employees where id = 101;

위의 예에서는 ON DUPLICATE KEY UPDATE 방법이 작동하는 데 필요하지 않더라도 INSERT 또는 UPDATE에 원하는 실제 값을 두 번 이상 선언하지 않도록 사용자 변수를 사용하도록 선택했습니다. 의도 한대로.

MySQL과 호환되는 모든 브라우저에서 위의 코드 행을 실행하십시오. 다음과 같은 결과가 표시됩니다.

출력:

-- Before update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Technology | John Doe      |       2017     |
+----+------------+---------------+----------------+

Query OK, 1 rows affected (0.00 sec)

-- After update
+----+------------+---------------+----------------+
| id | department | employee_name | year_published |
+----+------------+---------------+----------------+
|101 | Operations | John Doe      |       2013     |
+----+------------+---------------+----------------+
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn