열의 현재 값이 얼마인지 알지 못하더라도 UPDATE 명령과 SET 절을 함께 사용하면 간단히 해결할 수 있습니다. 핵심은 SET 열이름 = 열이름 + 더할값처럼 기존 열 값을 그대로 참조하는 것입니다. 아래에서 예제와 함께 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentScore int ); Query OK, 0 rows affected (0.81 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable(StudentScore) values(78); Query OK, 1 row affected (0.46 sec) mysql> insert into DemoTable(StudentScore) values(89); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable(StudentScore) values(67); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable(StudentScore) values(95); Query OK, 1 row affected (0.25 sec)
3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+--------------+ | StudentId | StudentScore | +-----------+--------------+ | 1 | 78 | | 2 | 89 | | 3 | 67 | | 4 | 95 | +-----------+--------------+ 4 rows in set (0.00 sec)
4. 현재 값을 몰라도 값 더하기
아래 쿼리처럼 열 자기 자신을 참조해 값을 더하면, 현재 값이 무엇인지 미리 알 필요가 없습니다. 여기서는 StudentId가 3인 학생의 점수에 21을 더해 보겠습니다.
mysql> update DemoTable set StudentScore=StudentScore+21 where StudentId=3; Query OK, 1 row affected (0.22 sec) Rows matched : 1 Changed : 1 Warnings : 0
5. 변경 결과 확인하기
테이블의 레코드를 다시 한번 조회해 보겠습니다.
mysql> select *from DemoTable;
StudentId가 3인 행의 점수가 67에서 88로 정확히 21만큼 증가한 것을 확인할 수 있습니다.
+-----------+--------------+ | StudentId | StudentScore | +-----------+--------------+ | 1 | 78 | | 2 | 89 | | 3 | 88 | | 4 | 95 | +-----------+--------------+ 4 rows in set (0.00 sec)
참고 사항
WHERE 절을 생략하면 테이블의 모든 행에 동일한 연산이 적용되므로 주의해야 합니다. 또한 이 방법은 MySQL뿐 아니라 PostgreSQL, SQL Server, Oracle 등 대부분의 관계형 데이터베이스에서 동일하게 작동합니다. 감소 연산이 필요하다면 + 대신 -를 사용하면 됩니다.