-
SQL 테이블 작성, 삭제, 변경Database 2021. 4. 27. 14:49728x90
데이터베이스 객체의 대표적인 테이블 작성, 삭제, 변경 등에 대해 알아보자.
이전까지는 SQL 명령 중 DML(조작하는 명령)을 알아보았다.
DML 명령을 내리기 위해선 당연히 테이블이 생성이 되어있어야 하며, 다룰 수 있는 어떠한 데이터가 존재해야한다.
이젠 SQL 명령 중 DDL(정의하는 명령)을 통해 스키마 내의 객체를 관리하는 방법을 알아보자.
테이블 작성
DDL은 모두 같은 문법을 사용한다. CREATE 로 작성, DROP으로 삭제, ALTER로 변경!
CREATE TABLE 테이블명( 열 정의1, 열 정의2, ... )
열 정의
열명 자료형 [DEFAULT 기본값] [NULL|NOT NULL]
정의하는 열의 자료형 (정수, 실수, 문자열...) NULL 허용 여부등 정의하고자 하는 테이블의 명을 명시하여 테이블을 생성 할 수 있다.
제약에 대한 내용은 추후 다시 포스팅하도록 하며 이번 포스팅에서는 간단한 예시로 설명하겠다.
테이블 삭제
DROP TABLE 테이블명;
삭제시 주의할 점은 편리하게 삭제하시겠습니까?를 되묻지 않는다는 것이다.
사용자에게 별도의 확인 절차 없이 테이블 안의 모든 데이터가 삭제되기 때문에 신중하게 사용해야 한다.
행 삭제
TRUNCATE TABLE 테이블명;
테이블의 모든 행을 삭제하는 명령이다. DELETE로도 삭제할 수 있지만, 행이 많으면 처리속도가 느려 위 명령어를 사용한다고 한다.
이때도 테이블의 저장된 데이터가 삭제되기 때문에 주의가 필요하다.
자세한 삭제는 포스팅 참고하면 좋을 듯 싶다 실제로 프로젝트를 하며 굉장히 유용하게 사용하였다(codermun-log.tistory.com/146?category=908093)
테이블 변경
ALTER TABLE 테이블명 하위명령;
테이블을 작성한 뒤, 열을 추가하거나 데이터 최대 길이를 변경하는 등 구성을 바꿔야하는 상황이 발생한다.
이때 테이블의 중요한 데이터가 존재할 경우 테이블을 삭제하지 않고 변경하는 방법으로 기존 데이터를 유지하며 테이블을 변경할 수 있다.
크게
1. 열 추가, 삭제 변경
2. 제약 추가, 삭제 등을 ALTER 명령으로 수행한다.
열 추가
열 추가의 경우 해당 열에 대한 데이터 값을 추가로 지정해야하기에 INSERT 명령이 문제 없이 돌아가는지 확인하는 절차가 필요하다.
테이블의 정의가 바뀌는 경우이기에 시스템에 큰 영향을 끼친다.
ALTER TALBE 테이블명 ADD 열 정의;
열 속성 변경
열 이름을 변경할 수는 없지만, 자료형이나 기본값 NULL 제약 등 속성은 변경 할 수 있다.
ALTER TABLE 테이블명 MODIFY 열 정의;
열 이름 변경
CHANGE 하부명령으로 열 이름을 변경할 수 있다. 추가로 열 속성도 함께 변경 할 수 있다.
MODIFY + 열 이름 변경 = CHANGE.
ALTER TALBE 테이블명 CHANGE [기존 열이름][신규 열정의];
열 삭제
테이블에 존재하지 않는 열을 지정할 경우 에러가 발생한다.
ALTER TABLE 테이블명 DROP 열명;
최대 길이 연장
실제 업무에서 사용되는 ALTER TABLE 명령 예시로
대규모 데이터베이스의 크기가 매우 커지는 상황이다.
이때는 데이터 하나의 크기를 최적화 하는 것만으로도 많은 저장공간을 절약할 수 있다고 한다.
ALTER TABLE로 열의 자료형을 변경해 대응하거나 최대 길이를 늘리는 방법으로 많이 사용한다고 한다.
반대로 저장공간을 늘리기 위해 최대 길이를 줄이고 싶은 경우도 있는데 이때는 여러 가지 문제가 발생한다.
기존 행에 존재하는 데이터의 길이보다 작게 변경할 수 없다.(일부가 잘려나가는 경우가 에러가 발생)
열의 최대길이를 줄였다고 해서 실제 저장공간이 늘어나는 경우는 드물다!
따라서, 최대길이를 늘리는 경우는 많지만 줄이는 경우는 없다고 한다.
출처 :
SQL 첫걸음/ 아사이 아츠시 지음/ 한빛미디어
728x90'Database' 카테고리의 다른 글
SQL 제약 (0) 2021.05.04 SQL 데이터베이스 객체 (0) 2021.04.25 SQL 상관 서브쿼리 (0) 2021.04.19 SQL 서브쿼리_2 (0) 2021.04.14 SQL 서브쿼리_1 (0) 2021.04.09