1. 복습!
- DDL 이란? → Data Defition Language 즉, 관계형 DB를 정의하기 위한 언어 → 명령어로는 대표적으로 CREATE, DROP, ALTER가 있다.
2. CREATE
CREATE TABLE contacts(
name TEXT NOT NULL,
age INTEGER NOT NULL,
email TEXT NOT NULL UNIQUE
);
- contacts( table 이름)
field의 이름/ DATATYPE/ 제약조건
을 적어준다.
- DATA TYPE
- SQLITE DATA TYPE
- NULL (python 의 None과 같음)
- INTEGER (정수)
- REAL(실수)
- TEXT(문자) string이 아닌 text!
- BLOB(거대 데이터 덩어리, 이미지데이터 같은 멀티미디어 파일)
- cf) Boolean type이나 Datetime type은 없다
- SQLITE의 특징
- 동적 타입 시스템을 사용한다. → DATA TYPE을 지정해주지 않아도, 입력받는 레코드(data)에 따라서 알아서 TYPE을 저장한다. → 즉 DB 생성시에 굳이 DATATYPE을 지정하지 않아도 된다.
- 하지만, 다른 DB와의 호환성을 위해서 지정하는 것을 권장한다.
- 타입선호도
- 다른 DB 엔진간의 호환성을 최대화 하기 위해 존재한다.
- 위에 언급된 5가지 Data type이 아닌 다른 데이터 타입을 선언한다면, 내부적으로 지정된 선호도에 따라
→ INTEGER, TEXT, BLOB, REAL, NUMERIC 으로 인식된다. (특히 불린, datetime 같은 것은 numeric 으로 인식되는 것을 기억하자)
- constraints (제약조건)
- 데이터의 무결성(정확성, 일관성)을 위해서 사용.
- 제약에 맞지 않다면 입력이 거부된다.
- Constraints의 종류
- NOT NULL
- NULL값을 허용하지 않는다.
- UNIQUE
- 컬럼의 값이 고유해야 한다.
- PRIMARY KEY
- 테이블에서 행의 고유성을 식별하는 데 사용되는 컬럼
- 암시적으로 NOT NULL 제약조건이 포함되어 있다
- INTEGER 타입에만 사용가능하다.
- AUTOINCREMENT
- 사용되지 않은 값이나 이전에 삭제된 행의 값을 재사용 하는 것을 금지한다.
- Django에서 테이블 생성시 id 컬럼에 기본 사용.
- rowid
- 테이블을 생성할 때 암시적으로 생성된다.
- 만약 INTEGER PRIMARY KEY 키워드를 사용해서 직접 만들면 → rowid의 별칭으로써 접근 가능하다.
- NOT NULL
- SQLITE DATA TYPE
3. ALTER
- RENAME table
ALTER TABLE table_name RENAME TO new_table_name;
- RENAME column
ALTER TABLE talbe_name RENAME column_name TO new_column_name;
- ADD a new column
ALTER TABLE table_name ADD COLUMN column_definition;
- 만약 기존 테이블에 Data가 있을 경우, Not Null 제약조건이 붙은 Column이 추가되면 에러가 발생한다. → Default 제약조건을 추가한다.
- Delete a column
ALTER TABLe table_name DROP COLUMN column_name;
- column을 삭제하지 못하는 경우가 있다.
- 컬럼이 다른 부분에서(FOREIGN KEY) 참조되는 경우
- primary key인 경우
- unique 제약조건이 있는 경우
4. DROP
DROP TABLE table_name;
- table은 한번에 하나만 지울 수 있다.
- 없는 table 지우려고 하면 오류가 난다.
- DROP TABLE 문은 실행하면 취소하거나 복구 할 수 없다.
Uploaded by N2T