[DB설계] 18. 테이블 정의 변경

표준 SQL 및 데이터베이스 입문

by AI개발자
gaebalai-sql-db (1).jpg

테이블을 정의한 후에 열이나 제약을 추가하는 것이 가능할까?

이때는 ALTER문으로 변경할 수 있습니다.

테이블의 정의는 ALTER문을 사용하여 변경할 수 있습니다. SQL-92(Full)에서 표준화되었지만, 표준화 이전부터 많은 DBMS가 지원되어 왔기 때문에 사용법은 DBMS에 따라 다릅니다. 이 강좌에서는 표준적인 문법을 사용하여 열이나 제약 정의를 변경하는 방법을 소개합니다.



⑴ 열과 제약 추가

이미 데이터가 입력된 열에 제약을 추가하고 싶은 경우에는 어떻게 해야 할까?

예를 들어, UNIQUE제약을 추가하고 싶지만, 이미 중복되는 값이 있는 경우나 추가하려는 제약에 위배되는 데이터가 존재하면 작업이 오류가 되어 처리됩니다.

일반적으로 열의 추가나 제약의 추가는 'ALTER TABLE 테이블명 ADD 열 또는 제약 정의'로 수행합니다.

이미 데이터가 있는 테이블에 열을 추가하는 경우, 해당 열의 값은 DEFAULT절로 지정한 값이 자동으로 입력됩니다. DEFAULT절을 지정하지 않으면 NULL이 입력됩니다.


다음은 '상품마스터'테이블을 생성한 후에,

① '재고수'라는 열 추가하고,

② '상품코드'를 주키로 설정하며,

③ '재고수'가 0이상되도록 하는 CHECK제약을 추가하는 예제입니다.

①은 열의 추가, ②와 ③은 제약의 추가에 해당합니다. ②와 ③에 대해서는 'CONSTRAINT 제약명'으로 제약명을 지정할 수 있는데, 아래 예제에서는 ③에만 제약명을 지정하고 있습니다.

우선 실행하는 'DROP TABLE IF EXISTS 상품마스터;'는 '상품마스터'라는 테이블이 존재하면 삭제한다는 의미로 샘플 SQL문과 동일한 내용을 테스트할 수 있도록 추가된 것입니다.


sql040-1.png


⑵ 열과 제약의 변경/삭제

삭제는 DROP을 사용하지만, 변경은 다소 복잡합니다. 또한 DBMS에 따라 다릅니다.

표준 SQL에서는 열이나 제약의 변경은 'ALTER TABLE 테이블명 ALTER 열명 또는 제약명 SET 정의' 그리고 삭제는 'ALTER TABLE 테이블명 DROP 열명 또는 제약명'으로 규정되어 있지만 실제 지원은 DBMS마다 다릅니다.


예를들어, MySQL, MariaDB의 CHANGE명령은 표준 SQL과 기능이 다르며, MySQL, MariaDB에서는 열의 정의와 이름변경을 동시에 수행할 수 있지만, 표준 SQL에서는 이름 변경만 수행할 수 있습니다. 또한, MySQL, MariaDB의 경우, 주키(Primary Key)는 DROP PRIMARY KEY로 삭제할 수 있지만, PostgreSQL에서는 제약명으로 지정(기본 제약명은 '열명_pkery")해야 합니다. 다음은 사용 예제입니다.


sql040-2.png


⑶ 참조제약(외부키 제약) 추가 및 삭제

참조제약도 ALTER TABLE의 ADD와 DROP명령으로 추가 및 삭제가 가능합니다. DROP 명령의 경우, 제약명의 지정이 필요하지만, FOREIGN KEY를 설정할 때 제약명을 지정하지 않았다면 시스템 기본 제약명이 사용됩니다.


다음 예제는 기본제약명을 사용하는 경우와 제약설정시 CONSTRAINT로 제약명을 지정한 경우의 2가지 예제를 보여줍니다. 이 예제는 '상품마스터'만으로 운영되던 환경에 새롭게 '창고마스터'를 추가하여 상품마스터에서 창고마스터를 참조호도록 한 상황을 가정한 것입니다.


sql040-3.png

테이블 정의도 쉽게 변경할 수 있습니다. 정의 변경도 DBMS용 관리도구나 관련 GUI도구를 통해 가능하며 ALTER문에 집착할 필요는 없습니다. 그리고 열을 추가하거나 삭제하면 SELECT문이나 INSERT문에서 열명을 생략한 경우 실행 결과에 영향을 줄 수 있으므로 주의해야 합니다.


©2024-2025 GAEBAL AI, Hand-crafted & made with Damon JW Kim.

GAEBAL AI 개발사: https://gaebalai.com

AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5


keyword
이전 17화[DB설계] 17. 참조제약(외부키)