MySQL에서 모든 행에 걸쳐 한 필드의 데이터를 다른 필드로 복사하려면 UPDATE 명령어를 사용하면 됩니다. 이 방법은 기본값으로 설정된 컬럼을 나중에 실제 값으로 채워야 할 때 특히 유용합니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
StudentId int,
StudentFirstName varchar(20),
StudentMarks int default 0
);
Query OK, 0 rows affected (0.49 sec)위 테이블은 학생 ID(StudentId), 이름(StudentFirstName), 점수(StudentMarks) 세 개의 컬럼을 가지며, StudentMarks는 기본값 0으로 설정되어 있습니다.
2. 레코드 삽입하기
INSERT 명령어를 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable(StudentId,StudentFirstName) values(89,'Larry'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(StudentId,StudentFirstName) values(35,'Robert'); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable(StudentId,StudentFirstName) values(48,'Chris'); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(StudentId,StudentFirstName) values(78,'David'); Query OK, 1 row affected (0.61 sec)
3. 현재 데이터 확인하기
SELECT 명령어로 테이블의 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 89 | Larry | 0 | | 35 | Robert | 0 | | 48 | Chris | 0 | | 78 | David | 0 | +-----------+------------------+--------------+ 4 rows in set (0.00 sec)
StudentMarks 컬럼이 아직 기본값인 0으로 채워져 있는 것을 확인할 수 있습니다.
4. UPDATE로 필드 간 데이터 복사하기
이제 모든 행에서 한 필드의 값을 다른 필드로 복사하는 핵심 쿼리입니다. 여기서는 StudentId의 모든 값을 StudentMarks로 복사합니다.
mysql> update DemoTable set StudentMarks=StudentId; Query OK, 4 rows affected (0.34 sec) Rows matched: 4 Changed: 4 Warnings: 0
UPDATE 문에서 SET 절에 '대상_컬럼 = 원본_컬럼' 형태로 작성하면, WHERE 조건 없이 테이블의 모든 행에 대해 원본 컬럼의 값이 대상 컬럼으로 복사됩니다.
5. 업데이트 결과 확인하기
모든 행이 정상적으로 업데이트되었는지 다시 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 89 | Larry | 89 | | 35 | Robert | 35 | | 48 | Chris | 48 | | 78 | David | 78 | +-----------+------------------+--------------+ 4 rows in set (0.00 sec)
출력 결과를 보면 StudentMarks 컬럼에 StudentId의 값이 각 행마다 성공적으로 복사된 것을 확인할 수 있습니다.
참고 사항
특정 조건을 만족하는 행만 복사하고 싶다면 WHERE 절을 함께 사용하면 됩니다. 예를 들어 UPDATE DemoTable SET StudentMarks=StudentId WHERE StudentId > 50;처럼 작성하면 StudentId가 50보다 큰 행만 업데이트됩니다. 또한 대용량 테이블을 업데이트할 때는 트랜잭션을 활용해 작업 전 데이터를 백업하는 것이 안전합니다.