[SQLD] 핵심정리 (1) SQL 기본

SQL 문장들의 종류

- SQL은 여러가지 종류의 키워드들이 있다.

- 데이터의 집을 짓는 것, 데이터를 조작하는 것, 조작한 데이터를 저장하거나 복구하는 것 등.

 명령어의 종류

명령어 

설명 

데이터 조작어

(DML : Data Manipulation Language) 

 SELECT

 데이터 베이스에 들어있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE라고도 한다.

INSERT

UPDATE

DELETE 

 데이터 베이스의 테이블에 들어있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블에 새로운 행으로 집어넣거나 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어들을 DML 이라고 한다.

 데이터 정의어

(DDL : Data Definition Language)

CREATE

ALTER

DROP

RENAME 

테이블과 같은 구조를 정의하는데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어들을 DDL이라고 부른다. 

 데이터 제어어

(DCL : Data Control Language)

GRANT

REVOKE 

데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어를 DCL이라고 부른다. 

트랜잭션 제어어

(TCL : Transaction Control Language) 

COMMIT

ROLLBACK 

논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말한다. 


ALERT구문 예제

- 분류명 : VARCHAR(10) NOT NULL  -> 분류명 : VARCHAR(30) NOT NULL 

- 등록일자 : VARCHAR(10) NULL      -> 등록일자 : DATE NOT NULL


위처럼 변경하고자 할때 사용할 수 있는 SQL 문장은??(DBMS : SQL SERVER)


>> ALTER TABLE 테이블명 ALTER COLUMN 분류명 VARCHAR2(30) NOT NULL; ALTER TABLE 테이블명 ALTER COLUMN 등록일자 DATE NOT NULL;

>> 위 두문장으로 따로따로 컬럼의 구조를 변경해야한다. 왜냐하면 ORACLE 과 달리 SQL SERVER는 복수개의 컬럼변경을 할 수 없다.



NULL 이란?

- 모르는 값을 의미함.

- 값의 부재를 의미함

- NULL과의 모든 비교(IS NULL 제외)는 알 수 없음(unknown)을 반환한다.

- ASCII 코드 00번으로 공백(ASCII : 32), 0(ASCII : 48) 와는 전혀 다른 값이다.

- 조건에 맞는 데이터가 없을 떄의 공집합과도 다르다.


제약조건

- PRIMARY KEY(기본키) : 주키로 테이블당 1개만 생성이 가능하다. 인덱스 포함.

- UNIQUE KEY(고유키) : 테이블 내에서 중복되는 값이 없으며, PK와 다른 점은 NULL을 허용한다는 점이다.

- NOT NULL : 해당 컬럼에 NULL값을 허용하지 않는다는 것이다. PK조건은 기본적으로 NOT NULL조건이 깔려 있다.

- CHECK : 데이터베이스에서 데이터의 무결성을 유지하기 위하여 테이블의 특정 컬럼에 설정하는 제약이다. 특정 값만 받을 때 사용.

- FOREIGN KEY(외래키) : 테이블간의 관계를 정의하기 위해 주로 기본키를 다른 테이블의 외래키가 참조하도록 설정한다.


RENAME 예제

- STADIUM 테이블의 이름을 STADIUM_JSC로 변경하는 SQL 작성하시오.

>> RENAME STADIUM to STADIUM_JSC


DELETE 시 컬럼에 걸린 제약조건들.

1) CASCADE : 부모테이블에 있는 컬럼 삭제시 자식테이블도 함께 삭제됨.

2) SET NULL : 부모테이블에 있는 컬럼 삭제시 자식테이블의 해당 컬럼은 NULL이 됨

3) SET DEFAULT : 부모테이블에 있는 컬럼 삭제시 자식테이블 해당 테이블의 값은 DEFAULT 값이 됨.

4) RESTRICT : 자식테이블에 PK값이 없는 경우만 부모테이블의 컬럼을 삭제할 수 있음.

5) NO ACTION : 참조무결성을 위반하는 삭제/수정행위를 일체 허용하지 않음.


INSERT시 컬럼에 걸리는 제약조건들

1) Automatic : 부모테이블에 PK가 없는 경우 부모테이블에 PK를 생성후 자식테이블에도 삽입

2) SET NULL : 부모테이블에 PK가 없는 경우 자식테이블의 외래키를 NULL값으로 처리

3) SET DEFAULT : 부모테이블에 PK가 없는 경우 자식테이블의 외래키를 지정된 DEFAULT 값으로 처리

4) DEPENDENT : 부모테이블에 PK가 존재할 때만 자식테이블에 INSERT를 할 수 있음.

5) NO ACTION : 참조무결성을 해치는 어떠한 삽입도 이뤄지지 않음.


DROP, TRUNCATE, DELETE의 차이점

- DROPT : 테이블의 구조 전체 및 존재 자체를 삭제, 따라서 로그가 남지 않음

- TRUNCATE : 테이블의 구조는 그대로 두고 차지하고 있던 데이터들을 초기화 하는 것. row 0으로 만드는 것. 로그가 남지 않음

- DELETE : 테이블의 데이터만 삭제하는 요소. 트리거를 사용하면 로그를 남길 수 있다.

- TRUNCATE 명령어는 UNDO를 위한 데이터를 생성하지 않기 때문에 동일한 데이터량 삭제시 DELETE 보다 빠르다.

- DROP, TRUNCATE은 Auto Commit이고, DELETE는 사용자 커밋으로 데이터를 복구할 수도 있다.


트랜잭션의 특성


특성 

설명 

원자성(Atomicity) 

트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아있어야 한다.(all or nothing) 

일관성(consistency) 

트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다. 

고립성(Isolation) 

트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다. 

지속성(durability) 

트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. 




댓글

Designed by JB FACTORY