존재하는 경우 레코드 업데이트 그렇지 않으면 MySQL 테이블에 삽입
데이터베이스 관리자는 때때로 MySQL 테이블에 레코드를 추가하거나 레코드가 정기적으로 있는 경우 업데이트해야 할 수 있습니다. MySQL은 사용자가 이미 존재하거나 PRIMARY KEY
값이 중복된 레코드를 삽입하려고 하면 경고를 보냅니다.
이 문서에서는 이 실수를 수정하고 더 나은 결과를 얻는 데 사용할 수 있는 방법에 대해 설명합니다.
존재하는 경우 레코드 업데이트 그렇지 않으면 MySQL 테이블에 삽입
행이 실제로 새롭거나 이미 존재하는지 확인한 후 행을 삽입해야 하는 경우 MySQL은 몇 가지 유용한 명령문을 제공합니다.
레코드가 존재하는 경우 REPLACE INTO
를 사용하여 레코드 업데이트 그렇지 않으면 MySQL 테이블에 삽입
한 가지 방법은 이전에 설명한 것처럼 중복된 UNIQUE
또는 PRIMARY KEY
값으로 인해 INSERT
명령이 실패할 때 행을 진정으로 바꾸려는 경우 REPLACE
문을 사용하는 것입니다.
REPLACE INTO
문을 사용할 때 실행된 각 명령에 대해 두 가지 가능한 결과가 있습니다.
- 원하는 값이 있는 데이터 행을 찾을 수 없기 때문에 일반적인
INSERT
문이 실행됩니다. - 일치하는 데이터 행이 발견되면 일반적인
DELETE
문을 사용하여 기존 행이 지워지고 표준INSERT
가 수행됩니다.
예를 들어 id
, department
, employee_name
및 joining_year
열이 있는 employees
테이블이 있다고 가정합니다. department
및 joining_year
의 id
= 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_name
및 joining_year
열이 있는 employees
테이블이 있다고 가정합니다. department
및 joining_year
의 id
= 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 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