- CREATE TABLE : 테이블 생성
- ALTER TABLE : 테이블 수정
- DROP TABLE : 테이블 삭제
CREATE TABLE 기본문법
CREATE TABLE 테이블이름 (
속성이름 테이터타입 [NOT NULL] [DEFAULT 기본값]
[PRIMARY KEY (속성리스트)]
[UNIQUE (속성리스트)]
[FOREIGN KEY (속성리스트) REFERENCES 테이블이름(속성리스트)][ON DELETE 옵션] [ON UPDATE 옵션]
[CONSTRAINT 이름] [CHECK(조건)]
);
- [ ]의 내용은 생략가능
- 세미콜론(;)으로 문장의 끝을 표시
- 대소문자는 구분하지 않지만 SQL언어는 대문자를 사용하도록 습관을 드린다
- CREATE TABLE문은 기본 제약사항, 기본키, 대체키, 외래기, 데이터무결성을 위한 제약조건 정의를 포함
NOT NULL
- 속성이 널 값을 허용하지 않음을 의미하는 키워드
DEFAULT
- 속성의 기본 값을 지정하는 키워드
- 속성의 값을 입력하지 않았을때 자동으로 들어간다
PRIMARY KEY
- 기본키를 지정하는 키워드
- NULL값을 허용하지 않는다 NOT NULL 을 사용하지 않아도 된다.
- PRIMARY KEY로 colums를 지정하면 그 colums의 정보들은 고유값을 가지게 된다.
- 기본키는 여러 필드를 포함할 수 있는데 이경우를 복합 키(Comosite Key)라고 한다.
- 유일성을 가진다 (해당 칼럼의 정보의 중복이 불가능하다)
- 데이터의 식별값으로 활용될 수 있다.(프라이머리키로 정보를 구분한다면 정확히 하나의 데이터를 특정할 수 있다.)
UNIQUE
- 대체키를 지정하는 키워드
- 대체키로 지정되는 속성의 값은 유일성을 가지며 기본키와 달리 NULL값이 허용된다.
- NULL값이 허용된 프라이머리키라고 이해하면 편하다.
- 정보의 유일성만이 목적일 때 사용하면 좋다.
FOREIGN KEY
- 외래키를 지정하는 키워드
- 외래키가 어떤 테이블 속성을 참조하는지 REFERNCES키워드 다음에 제시
예시 작성코드
FOREIGN KEY(사용할속성) REFERENCES 참조테이블(참조속성)
외래키의 정의
테이블을 작성할때 다른 테이블의 속성을 참조해서 쓰는일이다.
여기서 참조란 단순히 보고 배끼는것이 아닌 해당 테이블의 해당 속성을 그대로 들고 오는것이다.
그렇다면 문제가 발생할 수 있다.
A테이블의 C속성을 B테이블에서 외래키로 그대로 사용한다고 하면
A테이블에서 C속성의 값을 변경하였을때 B테이블의 C속성의 값은 어떻게 될까?
또한 B테이블에서 C속성의 값을 변경하였을때 A테이블의 C속성의 값은 어떻게될까?
이때 나오는것이 참조 무결성 제약조건 이다.
참조 무결성 제약조건
- 테이터의 무결성 : 데이터는 정확하고 유효해야 한다.
- 참조 무결성 제약조건 : 참조관계에 있는 데이터가 수정,입력,삭제 시에도 무결성을 유지하게 하는 조건
- 참조관계에 있는 데이터가 수정,입력,삭제 시에 어떻게 될지 정해준다.
이로 인해 외래키를 사용할땐 참조 무결성 제약조건 또한 필연적인 조건이 된다.
ON DELETE 참조 무결성 제약조건
- ON DELETE NO ACTION : 투플을 삭제하지 못하게함
- ON DELETE CASCADE : 관련 투플을 함께 삭제함
- ON DELETE SET NULL : 관련 투플의 외래키 값을 NULL로 변경함
- ON DELETE SET DEFAULT : 관련 투플의 외래키 값을 미리 지정한 기본값으로 변경함
예시 작성코드
예) FOREIGN KEY(사용할속성) REFERENCES 참조테이블(참조속성)
ON DELETE CASCADE ON UPDATE CASCADE;
ON DELETE는 삭제할시 ON UPDATE는 수정할시 적용된다
CHECK - 데이터 무결성 제약조건
CHECK(제약조건)
- 속성에 입력받을 데이터에 제약 조건을 거는것이다.
- 만약 사람들 테이블에 ' 나이 ' 라는 속성에 10000 이라는 숫자가 들어온다면 이 데이터는 정확하고 유효할까?
- 인간은 그정도 살수 없다 이렇게 데이터 무결성을 유지하기위해 CHECK로 제약을 거는것이다.
사용예시
CHECK (나이 <= 120)
CONSTRAINT - 제약조건에 이름 지정하기
CONSTRAINT 제약조건이름 제약조건식
여태 등장한 몇가지 제약조건이 있다 .
CHECK / NOT NULL 등등 여기에 이름을 부여할 수 있다.
CONSTRAINT CHK_CPY CHECK(제조업체 = '오뚜기')
ALTER TABLE - 테이블 수정
새로운 속성 추가
ALTER TABLE 테이블이름
ADD 속성이름 데이터타입 [NOT NULL] [DEFAULT 기본값];
MODIFY - 속성의 데이터 타입 변경
ALTER TABLE 테이블이름
MODIFY 속성명 데이터타입;
입 변경
기존 속성 삭제
ALTER TABLE 테이블이름
DROP COLUMN 속성이름;
**만약 삭제할 속성과 관련된 제약조건이 존재한다면 속성삭제가 안되고, 관련된 제약조건을 먼저 삭제하여야 한다.
새로운 제약조건의 추가
ALTER TABLE 테이블이름
ADD CONSTRAINT 제약조건이름 제약조건내용;
기존 제약조건 삭제
ALTER TABLE 테이블이름
DROP CONSTRAINT 제약조건이름;
**제약 조건삭제시에도 CONSTRAINT를 사용하는걸 보면 제약조건을 특정하기 위한 문법으로 보인다.
DROP TABLE - 테이블 삭제
DROP TABLE 테이블이름;
**만약 삭제할 테이블을 참조하는 테이블이 있으면 테이블삭제가 되지않고
관련된 오ㅚ래키 제약조건을 먼저 삭제해야한다.
'SQL' 카테고리의 다른 글
SQL SELECT / DML (0) | 2022.05.12 |
---|---|
MySQL 내장함수 (0) | 2022.05.11 |
(5)DML 데이터 조작어 - SELECT NOT IN (0) | 2022.05.11 |
MYSQL 시작하기 (0) | 2022.05.02 |
MYSQL?? SQL?? (0) | 2022.05.02 |