Create table 테이블 이름
AS 서브쿼리;
alter table 테이블 이름
add (컬럼이름 datatype(숫자));
새로 추가된 column에 추가하면 insert가 아니라 update문을 써야한다. 왜냐하면 이미 null값이 들어있기 때문이다.
항상 오른쪽 맨 마지막에 붙는다.
문법
alter table 테이블 이름
modify (컬럼이름 datatype(숫자));
만약 modify절에서 이미 size가 더 큰 data가 table에 존재한다면 error발생.
data가 이미 table에 있다면 datatype 변경은 X, size up은 항상 O, size down은 수정값보다 더 큰 data가 있냐 없냐에 따라 결정.
문법
alter table 테이블 이름
drop (컬럼이름 datatype(숫자));
column 삭제 그리고 중요한 것이 auto commit이기 때문에 반드시! 조심하는 것이 좋음!
drop 명령어는 DataDictionary에 있는 meta data까지 전부 삭제해버리기고 memory에 공간마저 전부 삭제해버리기 때문에 백업본이 없다면 절대 재고하는 것이 좋음.
add와 modify는 금방끝나지만 drop은 오래걸릴 수 있다. 이때 drop을 진행하게 되면 10분간 lock이 될 수 있는데 이때 lock의 규모가 table 단위이다.
이 위험한 것을 방지하고자 나온것이 set unused
delete문 경우 디스크 조각이 남는다. 반면 DDL 명령어 들은 디스트 조각이 남지 않는다.
특정 행단위 삭제는 delete문으로 하는 것이 좋다.
근본적인 원리는 Data Dictionary에는 모든 값들이 status가 used로 설정되어있는데 이 값을 바꾸어주어 사용자 눈에 안 보이게 하는 것이다. 하지만 data dictionary에 공간을 계속 차지하고 있게된다.
이를 막고자 등장한 문법이 아래와 같다.
alter table 테이블 이름
drop unused columns