MySQL에서는 UPDATE 명령어를 사용하여 테이블의 모든 행에 원하는 값을 손쉽게 추가할 수 있습니다. 이 글에서는 정수형 컬럼과 날짜형 컬럼에 각각 값을 더하는 방법을 실습 예제와 함께 단계별로 살펴보겠습니다.
1. 기본 문법
정수형(Integer) 컬럼에 값 더하기
UPDATE yourTableName SET yourIntegerColumnName = yourIntegerColumnName + anyValue;
UPDATE yourTableName SET yourIntegerColumnName = anyValue WHERE yourIntegerColumnName IS NULL;
첫 번째 쿼리는 모든 행의 값에 지정한 숫자를 더하고, 두 번째 쿼리는 값이 NULL인 행에 특정 값을 할당합니다.
날짜(Date) 컬럼에 값 더하기
UPDATE yourTableName SET yourDateColumnName = ADDDATE(yourDateColumnName, INTERVAL anyIntegerMonth MONTH);
날짜 컬럼에는 ADDDATE 또는 DATE_ADD 함수와 INTERVAL 구문을 조합하여 연·월·일 단위로 값을 더할 수 있습니다.
2. 예제 테이블 생성
위 문법을 이해하기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table addEachRowValue
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Amount int,
-> ShippingDate date,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.50 sec)
3. 샘플 데이터 삽입
INSERT 명령어로 여러 개의 레코드를 입력합니다.
mysql> insert into addEachRowValue(Amount,ShippingDate) values(100,'2019-02-21');
Query OK, 1 row affected (0.15 sec)
mysql> insert into addEachRowValue(Amount,ShippingDate) values(10,'2013-04-22');
Query OK, 1 row affected (0.19 sec)
mysql> insert into addEachRowValue(Amount,ShippingDate) values(110,'2015-10-25');
Query OK, 1 row affected (0.15 sec)
mysql> insert into addEachRowValue(Amount,ShippingDate) values(150,'2016-03-27');
Query OK, 1 row affected (0.29 sec)
mysql> insert into addEachRowValue(Amount,ShippingDate) values(190,'2018-12-29');
Query OK, 1 row affected (0.20 sec)
4. 전체 데이터 조회
SELECT 문으로 저장된 레코드를 확인합니다.
mysql> select *from addEachRowValue;
실행 결과:
+----+--------+--------------+
| Id | Amount | ShippingDate |
+----+--------+--------------+
| 1 | 100 | 2019-02-21 |
| 2 | 10 | 2013-04-22 |
| 3 | 110 | 2015-10-25 |
| 4 | 150 | 2016-03-27 |
| 5 | 190 | 2018-12-29 |
+----+--------+--------------+
5 rows in set (0.00 sec)
5. 정수형 컬럼(Amount)에 값 추가하기
정수 타입인 Amount 컬럼의 모든 행에 20을 더하는 쿼리입니다.
mysql> update addEachRowValue
-> set Amount=Amount+20;
Query OK, 5 rows affected (0.85 sec)
Rows matched: 5 Changed: 5 Warnings: 0
업데이트된 Amount 값을 다시 조회해 보겠습니다.
mysql> select Amount from addEachRowValue;
실행 결과:
+--------+
| Amount |
+--------+
| 120 |
| 30 |
| 130 |
| 170 |
| 210 |
+--------+
5 rows in set (0.00 sec)
모든 행의 Amount 값이 정확히 20씩 증가한 것을 확인할 수 있습니다.
6. 날짜형 컬럼(ShippingDate)에 값 추가하기
날짜 컬럼에는 ADDDATE 함수와 INTERVAL 키워드를 사용해 월 단위로 값을 더할 수 있습니다. 아래는 배송일(ShippingDate)을 1개월씩 미루는 쿼리입니다.
mysql> update addEachRowValue
-> set ShippingDate=adddate(ShippingDate,interval 1 month);
Query OK, 5 rows affected (0.31 sec)
Rows matched: 5 Changed: 5 Warnings: 0
업데이트된 ShippingDate 값을 확인합니다.
mysql> select ShippingDate from addEachRowValue;
실행 결과:
+--------------+
| ShippingDate |
+--------------+
| 2019-03-21 |
| 2013-05-22 |
| 2015-11-25 |
| 2016-04-27 |
| 2019-01-29 |
+--------------+
5 rows in set (0.00 sec)
마무리
이처럼 MySQL의 UPDATE 문 하나만으로 WHERE 절 없이도 테이블의 모든 행에 값을 일괄 추가할 수 있습니다. 정수형 컬럼은 단순 산술 연산(+, -)을 활용하고, 날짜형 컬럼은 ADDDATE 또는 DATE_ADD 함수와 INTERVAL 구문을 사용하면 됩니다. 참고로 대용량 테이블을 다룰 때는 BEGIN과 COMMIT으로 트랜잭션을 묶어 실행하면 오류 발생 시 안전하게 롤백할 수 있습니다.