본문 바로가기

Language/MySQL

[MySQL] 테이블 작성, 삭제, 변경

[SYNTAX]
테이블 작성 : CREATE TABLE 테이블명(열 정의 1, 열 정의 2,... )
테이블 삭제 : DROP TABLE 테이블명
테이블 변경 : ALTER TABLE 테이블명 하부 명령

 

SELECT, INSERT, DELETE, UPDATE는 SQL 명령 중에서도 DML(데이터 조작하는 명령)로 분류된다.

위에 나열된 테이블 작성, 삭제, 변경하는 SYNTAX들은 DDL(데이터를 정의하는 명령)로 스키마 내의 객체를 관리할 때 사용한다.

DDL은 모두 같은 문법을 사용한다. CREATE로 작성, DROP으로 삭제, ALTER로 변경할 수 있다.

 

 

 테이블 작성 

RDBMS에서 데이터베이스 상에 제일 먼저 만드는 객체 중 하나가 바로 테이블이다. 이때 CREATE TABLE 명령을 사용한다.

[SYNTAX] CREATE TABLE
CREATE TABLE 테이블명 (
    열 정의 1,
    열 정의 2,
    ...
)
[SYNTAX] 열 정의
열명 자료형 [DEFAULT 기본값] [NULL | NOT NULL]

 

열의 자료형 중 CHAR나 VARCHAR와 같은 문자열형으로 지정할 때는 최대 길이를 괄호로 묶어줘야 한다.

기본값을 설정할 때는 DEFAULT로 지정하되, 자료형에 맞는 리터럴로 기술하며, 기본값은 생략이 가능하다.

NULL을 명시적으로 지정하거나 생략했을 경우에는 NULL을 허용하지만, NOT NULL을 명시할 경우 제약이 걸리면서 NULL이 허용되지 않는다.

 

 

 

 테이블 삭제 

[SYNTAX] 
DROP TABLE 테이블명

 

DROP TABLE에서 지정하는 것은 테이블명뿐이다.

여기서 주의할 점은 DROP TABLE을 실행했을 때 확인을 요구하지 않는다는 것이다.

그렇기 때문에 실수로 테이블을 삭제하지 않도록 신중하게 DROP TABLE을 실행해야 한다.

 

테이블은 그대로 두고 데이터만 삭제하고 싶을 경우는 DELETE명령을 사용한다.

이때 DELETE 명령에 WHERE 조건을 지정하지 않으면 테이블의 모든 행을 삭제할 수 있다.

하지만, DELETE 명령은 행 단위로 명령이 수행되므로 삭제할 행이 많으면 처리속도가 상당히 늦어진다.

이런 경우 DDL로 분류되는 TRUNCATE TABLE 명령을 사용하면 삭제할 행은 지정할 수 없으나, 모든 행을 삭제해야 할 때 빠른 속도로 삭제가 가능하다.

[SYNTAX]
TRUNCATE TABLE 테이블명

 

 

 

 테이블 변경 

테이블을 만든 뒤 열 구성을 변경하고 싶다면 ALTER TABLE명령을 사용해서 변경할 수 있다.

 

  • 열 추가

ALTER TABLE에서 열을 추가할 때는 ADD 하부 명령을 통해 실행할 수 있다.

ALTER TABLE ADD로 열을 추가할 때, 기존 데이터행이 존재하면 추가한 열의 값이 모두 NULL이 된다.

기본값이 지정되어 있다면 기본값으로 데이터가 저장된다.

NOT NULL 제약을 붙인 열을 추가하고 싶다면 먼저 NOT NULL로 제약을 건 뒤에 NULL 이외의 값으로 기본값을 지정해야 한다.

 

  • 열 속성 변경

ALTER TABLE에서 열 속성을 변경할 때는 MODIFY 하부 명령을 통해 실행할 수 있다.

기존의 데이터행이 존재하는 경우, 속성 변경에 따라 데이터 역시 변환된다.

이때 자료형이 변경되면 테이블에 들어간 데이터의 자료형 역시 변경된다.

만약 처리과정에서 에러가 발생한다면 ALTER TABLE 명령은 실행되지 않는다.

 

  • 열 이름 변경

ALTER TABLE로 열 이름을 변경할 때는 MODIFY가 아닌 CHANGE 하부 명령으로 변경할 수 있다.

[SYNTAX]
ALTER TABLE 테이블명 CHANGE [기존 열 이름] [신규 열 정의]

CHANGE는 열 이름뿐만 아니라 열 속성도 변경할 수 있다.

 

  • 열 삭제

ALTER TABLE로 열을 삭제할 때는 DROP 하부 명령을 사용한다.

테이블에 존재하지 않는 열이 지정되면 에러가 발생한다.

[SYNTAX]
ALTER TABLE 테이블명 DROP 열명

 

 

 

 ALTER TABLE로 테이블 관리 

대규모 데이터베이스에서는 데이터의 크기가 매우 커지는 경향이 있다. 

시스템을 운용하다 보면 처음에 한자리로 충분했던 용량이 시간이 지나면서 부족해지는 일이 많아지는데, 이러한 경우 ALTER TABLE로 열의 자료형만 변경해 대응할 수 있다.

특히, 문자열형의 경우 최대길이를 ALTER TABLE로 늘릴 수 있다.

ALTER TABLE smaple MODIFY col VARCHAR(30);

 

반대로 자료형의 최대 길이를 줄이고 싶은 경우가 있을 때 여러 문제가 발생하기 때문에 주의해야 한다.

기존 행에 존재하는 데이터보다 작게 지정할 수 없다. 작게 지정하면 저장된 데이터의 일부가 잘려나가 에러가 발생하기 때문이다.

또한, 열의 최대길이를 줄였다고 해서 실제 저장공간이 늘어나는 경우도 적다.

 

테이블에 열을 추가하는 일은 빈번하게 일어난다.

보통 열을 추가하는데 시스템에 미치는 영향이 적을 것 같지만, 테이블 정의가 바뀌는 일인 만큼 꽤 영향을 준다.

최소한 변경한 테이블에 행을 추가하는 INSERT 명령은 확인해야 한다.

열을 추가하면 해당 열에 대해 데이터 값을 지정해야 하기 때문이다.

만약 기존 시스템의 INSERT 명령에서 열 지정이 생략되어 있다면, 열을 추가한 후 그대로 실행했을 때 열의 개수가 맞지 않아 에러가 발생할 수 있다.

'Language > MySQL' 카테고리의 다른 글

[MySQL] 인덱스 구조  (0) 2022.11.24
[MySQL] 제약  (0) 2022.11.23
[MySQL] 데이터베이스 객체  (0) 2022.11.22
[MySQL] 상관 서브쿼리  (0) 2022.11.20
[MySQL] 서브쿼리  (0) 2022.11.17