본 강의를 수강 후 정리한 글입니다 .
https://www.youtube.com/playlist?list=PLlCujDgOz8x6nDWtRr5AlHWB9Xp-Lxf-z
제약조건
1. NOT NULL : 칼럼이 NULL 값을 포함하지 못하도록 지정
2. UNIQUE : 칼럼 값이 해당 테이블 전체에서 유일한 값
3. PRIMARY KEY : NOT NULL & UNIQUE
- Table 레벨로 만드는 경우
CREATE TABLE table_name(
col_1 datatype [NULL | NOTNULL],
col_2 datatype [NULL | NOTNULL],
...
col_n datatype [NULL | NOTNULL],
CONSTRAINT constraint_name
PRIMARY KEY (col_1, col_2, ...));
👉CONSTRAINT name PRIMARY KEY (column)
- Column 레벨로 만드는 경우
CREATE TABLE emp(
col_1 datatype [NULL | NOTNULL] CONSTRAINT name PRIMARY KEY ,
col_2 datatype [NULL | NOTNULL],
...
col_n datatype [NULL | NOTNULL] );
👉 칼럼 레벨로 만드는 경우 (바로 옆에 지정 가능)
👉 단, 2개 이상인 경우 테이블 레벨로 만들어야 함
- 테이블을 만든 후 추가 가능함
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
PRIMARY KEY (col_1, col_2, ...));
4. FOREIGN KEY : 입력되어야 할 값이 다른 테이블의 칼럼 값을 참조
CREATE TABLE table_name (
col_1 datatype [ NULL | NOT NULL ],
col_2 datatype [ NULL | NOT NULL ],
...
col_n datatype [ NULL | NOT NULL ],
CONSTRAINT constraint_name
FOREIGN KEY (col_1, col_2, ... col_n)
REFERENCES parent_table (col_1, col_2, ... col_n)) ;
👉CONSTRAINT name FOREIGN KEY (column)
REFERENCES parent_table (column) - 참조 테이블 필수
👉두 테이블에 데이터가 있을 경우에 dept1 테이블의 데이터를 삭제하는 경우엔 어떻게 될까?
=> 참조하는 이상 삭제 불가능. 참조 테이블 먼저 삭제하고 참조 테이블 삭제해야함
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (col_1, col_2, ... col_n)
REFERENCES
parent_table (col_1, col_2, ... col_n)
ON DELETE CASCADE;
👉ON DELETE CASCADE는 참조하고 있는 parent 테이블의 데이터를 삭제하면 관련된 데이터를 함께 삭제시킴.
5. CHECK : 해당 조건을 만족하는 값으로만 입력을 제한
CREATE TABLE table_name (
col_1 datatype [ NULL | NOT NULL ],
col_2 datatype [ NULL | NOT NULL ],
... ,
CONSTRAINT constraint_name
CHECK (column_name condition) [DISABLE]);
👉CONSTRAINT name CHECK (condition)
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
CHECK (column_name condition)
[DISABLE];
👉테이블을 만든 후에 추가 가능
제약 조건의 비활성 / 활성
ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name
CASCADE ;
ALTER TABLE table_name
ENABLE CONSTRAINT constraint_name
CASCADE ;
👉이와 같은 제약 조건이 없으면 무엇이 문제가 되나?
=> 프로그래밍 시 로직에 의해서 제약조건들이 하는 부분을 코딩해야 함.그러므로 가능한 한 제약 조건 설정하는 게 좋음
VIEW
- 필요한 데이터는 볼 수 있되, 필요하지 않은 데이터는 볼 수 없음.
- 복잡한 쿼리 저장
- 데이터의 구조 단순화
- 사용자를 위한 편리한 인터페이스
- 테이블 자료에 대한 접근 제한
- 테이블 구조 변경에 의한 영향으로부터 프로그램을 분리
CREATE [ OR REPLACE ] VIEW view_name
AS
SELECT column_list
FROM tables
[ WHERE conditions ];
CREATE VIEW emp_v10
AS
SELECT empno, ename, deptno
FROM emp
WHERE deptno = 10;
DROP VIEW view_name ;
SEQUENCE
- 일련번호 생성기?
CREATE SEQUENCE sequence_name
START WITH value
INCREMENT BY value
MINVALUE value
MAXVALUE value
CACHE value
NOCYCLE ;
- ex
CREATE SEQUENCE my_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 100
NOCYCLE
CACHE 5;
👉SELECT my_seq.NEXTVAL FROM DUAL;
👉참조시 seq_name.NEXTVAL 반드시 사용
SYNONYM
CREATE [OR REPLACE] [PUBLIC]
SYNONYM [schema .]synonym_name
FOR [schema .]object_name[@ dblink] ;
- ex
CREATE SYNONYM emp_sal
FOR employees.salary;
👉테이블 이름이 간결
INDEX
- 테이블이 가진 결과를 빨리 검색하고자 필요에 따라 만듦
CREATE INDEX index_name
ON table_name (column1 column2, …) ;
👉많은 양의 데이터를 갖고 있는 테이블인 경우에는 인덱스를 생성할 때, 시간이 많이 소요된다.
'😺Data Base > 😻 SQLD' 카테고리의 다른 글
[SQL] WHERE 절 (0) | 2022.11.02 |
---|---|
[SQL] SQL 종류 - DML / TCL / DCL / TRANSACTION (0) | 2022.11.02 |
[SQL] SQL 종류 - DDL / Data Type (0) | 2022.10.31 |
[SQL] JOIN (0) | 2022.09.20 |
[DB] Transaction - 동시성 문제 (0) | 2022.09.20 |