MySQL에서 전체 행을 업데이트하는 기본 개념
MySQL에서 테이블의 특정 행(row) 전체를 한 번에 수정하려면 UPDATE 명령어를 사용합니다. 이때 가장 중요한 것은 해당 행을 정확히 식별할 수 있는 기본 키(Primary Key) 컬럼입니다. WHERE 절에서 기본 키를 조건으로 지정하면 원하는 행만 안전하게 수정할 수 있습니다.
전체 행 업데이트 기본 문법
UPDATE yourTableName
SET yourColumnName1 = 'yourValue1',
yourColumnName2 = 'yourValue2',
yourColumnName3 = 'yourValue3'
WHERE yourPrimaryKeyColumnName = yourValue;
SET 절에는 수정하고 싶은 모든 컬럼과 새로운 값을 나열하고, WHERE 절에는 기본 키 값을 지정하여 대상 행을 특정합니다. 만약 WHERE 절을 생략하면 테이블의 모든 행이 변경되므로 반드시 주의해야 합니다.
예제 테이블 생성하기
문법을 실제로 이해하기 위해 예제 테이블을 먼저 생성해 보겠습니다. 아래 쿼리는 학생 정보를 저장하는 테이블을 만듭니다.
mysql> create table UpdateEntireRowDemo
&;-> (
&;-> Id int NOT NULL AUTO_INCREMENT,
&;-> Name varchar(20),
&;-> Age int,
&;-> Marks int,
&;-> PRIMARY KEY(Id)
&;-> );
Query OK, 0 rows affected (0.74 sec)
테이블 구조는 다음과 같습니다.
- Id: 자동 증가(AUTO_INCREMENT)되는 기본 키
- Name: 학생 이름 (최대 20자)
- Age: 나이
- Marks: 점수
샘플 데이터 삽입하기
INSERT 명령어를 사용해 여러 학생의 레코드를 추가합니다.
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Sam',23,78);
Query OK, 1 row affected (0.32 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Mike',21,99);
Query OK, 1 row affected (0.16 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Carol',26,80);
Query OK, 1 row affected (0.11 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('John',22,71);
Query OK, 1 row affected (0.16 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Bob',29,89);
Query OK, 1 row affected (0.16 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('David',25,68);
Query OK, 1 row affected (0.20 sec)
mysql> insert into UpdateEntireRowDemo(Name,Age,Marks) values('Larry',31,91);
Query OK, 1 row affected (0.12 sec)SELECT 문으로 테이블의 전체 레코드를 확인해 보겠습니다.
mysql> select *from UpdateEntireRowDemo;
실행 결과는 다음과 같습니다.
+----+-------+------+-------+
| Id | Name | Age | Marks |
+----+-------+------+-------+
| 1 | Sam | 23 | 78 |
| 2 | Mike | 21 | 99 |
| 3 | Carol | 26 | 80 |
| 4 | John | 22 | 71 |
| 5 | Bob | 29 | 89 |
| 6 | David | 25 | 68 |
| 7 | Larry | 31 | 91 |
+----+-------+------+-------+
7 rows in set (0.00 sec)
전체 행 업데이트 실행하기
이제 Id가 5인 행(Bob)의 이름, 나이, 점수를 모두 변경해 보겠습니다. UPDATE 문에서 SET 절에 세 개의 컬럼을 모두 지정하면 해당 행 전체를 수정하는 효과를 얻을 수 있습니다.
mysql> update UpdateEntireRowDemo
&;-> set Name = 'James',Age = 19,Marks = 78
&;-> where Id = 5;
Query OK, 1 row affected (0.12 sec)
Rows matched: 1 Changed: 1 Warnings: 0
실행 결과 메시지를 보면 Rows matched: 1, Changed: 1로 표시됩니다. 이는 조건에 일치한 행이 1개이며, 실제로 1개의 행이 성공적으로 변경되었음을 의미합니다.
업데이트 결과 확인하기
변경된 행만 조회하여 결과를 검증해 보겠습니다.
mysql> select *from UpdateEntireRowDemo where Id = 5;
출력 결과는 다음과 같습니다.
+----+-------+------+-------+
| Id | Name | Age | Marks |
+----+-------+------+-------+
| 5 | James | 19 | 78 |
+----+-------+------+-------+
1 row in set (0.00 sec)
이름이 'Bob'에서 'James'로, 나이는 29세에서 19세로, 점수는 89점에서 78점으로 모두 정상적으로 변경된 것을 확인할 수 있습니다.
전체 테이블 최종 확인
마지막으로 테이블의 모든 레코드를 조회하여 다른 행에는 영향이 없었는지 확인합니다.
mysql> select *from UpdateEntireRowDemo;
전체 출력 결과는 다음과 같습니다.
+----+-------+------+-------+
| Id | Name | Age | Marks |
+----+-------+------+-------+
| 1 | Sam | 23 | 78 |
| 2 | Mike | 21 | 99 |
| 3 | Carol | 26 | 80 |
| 4 | John | 22 | 71 |
| 5 | James | 19 | 78 |
| 6 | David | 25 | 68 |
| 7 | Larry | 31 | 91 |
+----+-------+------+-------+
7 rows in set (0.00 sec)
결과를 보면 Id 5번 행만 'James / 19 / 78'로 변경되었고, 나머지 6개 행은 그대로 유지된 것을 알 수 있습니다.
핵심 정리 및 주의사항
- MySQL에서 행 전체를 수정하려면 UPDATE + SET + WHERE 조합을 사용합니다.
- WHERE 절에는 기본 키 컬럼을 조건으로 사용하는 것이 가장 안전합니다.
- WHERE 절을 빠먹으면 테이블의 모든 행이 일괄 변경되므로 실행 전 반드시 확인하세요.
- 중요한 데이터를 수정하기 전에는 SELECT 문으로 대상 행을 미리 조회해 보는 습관을 들이면 실수를 예방할 수 있습니다.