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

Shraddha Paghdar 2023년6월20일
존재하는 경우 레코드 업데이트 그렇지 않으면 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     |
+----+------------+---------------+----------------+
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