DDL(create, alter, drop)

oyeon·2021년 1월 2일
0
post-custom-banner
  • mysql에서 MUL은 FK를 의미

create - 테이블 추가

create table book(
    isbn varchar(10) primary key,
    title varchar(20) not null,
    price integer not null
);

alter - 테이블 변경

  • add - 컬럼 추가
alter table book add author varchar(20);
  • drop - 컬럼 삭제
alter table book drop price;
  • change - 컬럼 변경
alter table book change isbn ISBN varchar(15);
  • rename - 테이블 이름 변경
alter table book rename book2;

drop - 테이블 삭제

drop table EMPLOYEE2;

생각해보기

Q. 칼럼의 길이가 10인데, 해당 칼럼에 값이 저장되어 있습니다. 이 때 칼럼의 길이를 5로 바꾼다면 어떤 일이 벌어질까요?

  • ERROR 1265 (01000): Data truncated for column 'TITLE' at row 1 와 같은 문장이 출력된다. 일반적으로 자료형의 범위를 벗어나는 큰 데이터를 삽입했을 때 해당 경고가 발생하는데 위의 경우에 칼럼의 길이를 5로 변경했을 때, 기존 데이터가 자료형의 범위를 벗어나기 때문으로 보인다.

Q. 문자열을 저장하는 데이터 타입인 CHAR와 VARCHAR 차이점에 대해 알아보고 어떤 상황에서 CHAR 또는 VARCHAR 를 선택하는 것이 효율적인지 생각해봅시다.

  • CHAR는 고정길이 문자열 타입으로 만약 타입의 크기만큼의 데이터가 들어오지 않는 경우 이후의 공간을 SPACE로 채워 넣는다. 고정길이 문자열이므로 헤더에 레코드의 길이 정보가 들어있지 않다.
  • VARCHAR는 가변길이 문자열 타입으로 타입의 크기만큼 데이터가 들어오지 않더라도 이후의 공간을 SPACE로 채워넣지 않는다. 가변길이 문자열이므로 헤더에 레코드의 길이 정보가 포함된다.
create table test(c1 char(5), c2 varchar(5));
insert into test values('ABC', 'ABC');

select * from test where c1 = 'ABC';  // 출력 OK
select * from test where c1 = 'ABC '; // 출력 OK
select * from test where c2 = 'ABC';  // 출력 OK
select * from test where c2 = 'ABC '; // 출력 X
  • 이름, 주소 등의 길이가 변할 수 있는 값은 VARCHAR를 사용
  • 사번, 주민등록번호와 같이 길이가 일정한 데이터는 CHAR를 사용하는게 좋다.
  • 하지만 속도의 차이는 미미하므로 얼마든지 변할 수 있는 프로젝트 환경에서 오히려 고정공간을 만들어 놓았다가 빈 공간에 대한 비용이 더 큰 경우가 생길 수 있으므로 애매하면 VARCHAR 를 추천한다.

Q. 문자열 데이터 타입에는 문자셋을 지정할 수 있습니다. 문자셋에 따라 해당 필드가 차지하는 공간 크기를 한번 계산해보자. (예: VARCHAR(10) CHARACTER SET UTF8; 은 몇 Byte 크기를 차지할까요? ASCII 일때는 또 몇 Byte 크기를 가질까요?

reference

profile
Enjoy to study
post-custom-banner

0개의 댓글