학원 수업

17일차 - SQL 'DDL, 인덱스'

Hiolet 2021. 10. 25. 23:50

 

create table

 

create table 테이블 이름(열 이름 자료형, 열 이름 자료형 ·  ·  · );

테이블을 만들 때(생성) 사용한다.

 

 


 

alter table

 

기존 테이블에 열을 추가, 삭제 또는 수정할 때 사용한다.

 

열 추가 : alter table 테이블 이름 add 열 이름 자료형;

 

 

alter table의 add로 테이블 제약 primary key를 설정할 수 있다.

 

 

 

열 삭제 : alter table 테이블 이름 drop 열 이름;

 

 

 

열 수정 : alter table 테이블 이름 modify 열 이름 자료형;

열 수정 : alter table 테이블 이름 modify 열 이름 자료형 열 제약;

 

 

 

열 수정 : alter table 테이블 이름 change 열 이름 자료형;

*change는 modify 특징 + 열 이름 수정이다.

 

 


 

제약

 

테이블을 만들 때 자료형 다음에 제약 조건을 적을 수 있다.

  • not null -> null값을 넣지 않겠다. => 열 제약
  • defalut -> 기본값
  • primary key -> 기본키(not null) => 테이블 제약
  • foreign key
  • check

primary key

테이블에는 꼭 primary key 한 개를 가지고 있어야 한다. 테이블을 만들 때 자료형 뒤에 primary key를 써 주면 된다.

 

 

*primary key는 null값을 가질 수 없기 때문에 not null은 꼭 안 써도 된다. 자동으로 not null이 되지만 데이터베이스마다 다를 수 있다. Oracle과 MySQL은 자동

 

이미 있는 테이블에 primary key를 추가하려면 alter table 테이블 이름 add primary key(열 이름);

 

primary key를 지정하면 임의로 다른 키로 바꿀 수 없다!

 


unique 조건

 

unique 제약은 특정 열에 중복된 값이 생기는 것을 방지할 수 있다.

 

 

unique에는 primary key와 달리 null값이 올 수 있다.

 


 

인덱스

 

인덱스의 역할은 검색 속도를 빠르게 하는데 있다.

*종이 위에 인덱스 붙이는 것처럼 테이블 위에 인덱스가 있다고 생각하면 된다.   

 

이진 검색 (binary search) : 인덱스에 쓰이는 검색 알고리즘

1부터 100까지 있는 데이터 중에 원하는 데이터를 검색할 때 최악의 상황은 100번 검색하는 것이다.
이진 검색은 데이터를 반으로 딱 나누고 원하는 데이터를 확인하고 없다면 현재 위치 보다 작은지 큰지로 구분해서

검색 범위를 계속 반씩 줄인다.
운 나쁘게 100번을 검색해야 되는 상황보다 속도가 훨씬 빠르다.

*인덱스는 create, drop 두 가지만 쓴다. 테이블을 삭제하면 인덱스도 같이 삭제된다.

 

인덱스 생성 : create index 인덱스 이름 on 테이블 이름(열 이름);

인덱스 생성 : drop index 인덱스 이름 on 테이블 이름;

 

 

*프라이머리키는 따로 지정 안 해도 인덱스가 들어가있다고 보면 된다.

 

실제로 인덱스를 사용해서 검색하는지 확인하려면 explain명령을 쓰면 된다.

 

 

possible_key칸에 사용될 수 있는 인덱스가 표시되고 key는 사용된 인덱스가 표시된다.

 

 

 

create view 뷰 이름 as select * from 테이블 이름;

뷰의 열 지정을 따로 지정했다면 select문에도 일일이 지정해야 해서 모든 열을 사용할 경우에는 지정하지 않는게 좋다.


뷰를 만든 뒤에 select로 뷰의 이름을 지정하면 참조할 수 있다.

select * from 뷰 이름;

 

 

drop view 뷰 이름;

뷰를 삭제하면 select로 뷰를 참조 할 수 없다.