- sql은 데이터베이스를 사용하기 위해 이해해야 하는 언어이다.
- sql은 관계데이터베이스를 위한 표준 질의어다.
- 지속적으로 표준화 작업을 위해 발전되어왔다.
- sql에는 테이블을 생성/변경/제거 데이터 정의어, 데이터 CRUD를 하는 데이터 제작어, 보안 위해 데이터 접근 권한을 부여하고 취소하는 데이터 제어어가 있다.
- 데이터 정의어는 create,alter,drop 명령문이 존재한다.
- 데이터 조작어는 select,insert,update,delete 가 존재한다
- 다음 세 릴레이션으로 구성된 데이터베이스를 조작해보겠다.
- 테이블 단위로 조작이 이루어진다면 sql의 데이터 정의 기능을 사용했다고 생각하면 된다.
- create table 구문을 통해 테이블을 생성한다.
- 중괄호안의 내용은 생략이 가능하다. 따라서 속성 이름과 데이터 타입은 반드시 정의해야 한다.
- 대소문자를 구분하지 않는 특징이 있다.
- 1번은 테이블 구성 속성의 이름과 데이터 타입, 제약사항을 정의한다.
- 2번은 기본키(primary key)를 정의한다.
- 3번은 대체키(unique)를 정의한다.
- 4번은 외래키(foreign key)를 정의한다.
- 5번은 데이터 무결성을 위한 제약조건을 정의한다.
- create table 속성의 정의는 테이블을 구성하는 속성의 데이터 타입과 제약조건을 결정한다.
- not null은 널 값을 허용하지 않는 속성에 정의한다.
- default는 속성의 기본 값을 지정한다.
- 키를 정의하는 구간은 primary key로 기본키를 지정한다. 널 값이 허용되지 않는다.
- unique로 대체키를 지정하며 이 값은 유일성을 가지고 기본키와 달리 널 값이 허용된다.
- 외래키는 foreign key로 지정하면 refrences로 참조하는 테이블의 속성을 지정한다
- 데이터 무결성 제약조건은 check를 통해 정의하며, constraint 키워드로 고유의 이름을 부여한다.
- 다음과 같이 예제에 대한 테이블을 생성할 수 있다.
- 재고량이 0개 이상 10000개 이하를 유지하는 테이블을 생성해야 한다. check을 이용해 제약조건을 건다.
- 주문고객 속성이 고객 테이블의 고객아이디를 참조하는 외래키, 주문제품 속성이 제품 테이블의 제품번호 속성을 참조하는 외래키가 되어야 한다. foreign key를 사용해 주문고객이 고객테이블의 고객아이디를 reference 하고, 주문 제품이 제품의 제품번호를 reference 하게 한다.
- 외래키는 기본키와 도메인을 같게 해야 함을 유의하자.
- 테이블 변경은 alter table을 사용한다. 새로운 속성을 추가할때는 add를 사용한다.
- 고객 테이블에 가입 날짜속성을 alter table의 add를 통해 추가할 수 있다.
- 기존의 속성을 지우고 싶을 때는 add가 아닌 drop을 사용한다. 이때 조건을 줄 수 있는데, cascade를 사용하면 삭제할 속성과 관련된 제약조건이나 참조하는 속성을 함께 삭제한다. restrict는 삭제할 속성과 관련된 제약조건이나 참조하는 다른 속성이 존재하면 삭제를 거부한다.
- 테이블 자체를 제거할때는 drop table을 사용한다. 이때도 cascade와 restrict를 사용하는데, 이 때는 속성이 아닌 테이블과 관련된 것이다. 위 예제에서는 고객 테이블을 참조하는 다른 테이블이 존재하면 삭제가 수행되지 않아야 하므로 restrict를 사용한다