😺Data Base/😻 SQLD

[SQL] 제약조건 / VIEW / SEQUENCE / SYNONYM / INDEX

디카페인라떼 2022. 11. 1. 00:11

본 강의를 수강 후 정리한 글입니다 .

https://www.youtube.com/playlist?list=PLlCujDgOz8x6nDWtRr5AlHWB9Xp-Lxf-z 

 

01. SQL 기본

#SQL기본 #SQLD #SQLP 이론적인 내용이 지루하다고 생각할 수도 있습니다. 하지만 SQL을 현장에서 능숙하게 활용할 수 있기 위해서는 기본적인 지식에 대한 기초를 튼튼하게 다져야 할 필요가 있습니

www.youtube.com


제약조건

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