SQL-D 기출 초토화: SQL 기본(1)

0
post-thumbnail

SQL 종류

분류명령어설명
DML: 데이터 조작어
(Manipulation)
SELECT
INSERT
UPDATE
DELETE
DDL: 데이터 정의어
(Definition)
CREATE
ALTER
DROP
RENAME
DCL: 데이터 제어어
(Control)
GRANT
REVOKE
데이터베이스에 접근하거나 객체들을 사용하도록 권한을 주고 회수하는 명령어
TCL: 트랜잭션 제어어
(Transaction
Control Language)
COMMIT
ROLLBAK
논리적인 작업의 단위를 묶어서
DML에 의해 조작된 결과를 작업단위(트랜잭션)별로 제어하는 명령어
일부에서는 DCL로 분류하기도 한다

DML(비절차적 데이터 조작어) & 절차적 데이터 조작어

  • As-Is
    비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는지만을 명시한다.

  • To-Be
    비절차적 데이터 조작어(DML)는 사용자가 무슨(What) 데이터를 원하는지만 명시하지만, 절차적 데이터 조작어는 어떻게(How) 데이터에 접근해야 하는지를 명세한다.

    절차적 데이터 조작어로는 PL/SQL(OracleDB), T-SQL(SQL Server) 등이 있다.


SQL Server의 특징

  • 여러 개의 칼럼을 동시에 수정하는 구문은 지원하지 않는다
  • 괄호()를 사용하지 않는다

칼럼 정의 변경

Oracle

alter table TableName modify (colName1 colType.. , colName2 colType...)

SQL Server

alter table TableName alter colName1 colType ...;
alter table TableName alter colName2 colType ...;

칼럼 삭제

alter table TableName drop colName;

NULL값의 특징

  • 모르는 값을 의미한다
  • 값의 부재를 의미한다
  • NULL과의 모든 비교(IS NULL을 제외한)는 알 수 없음을 반환한다

DELETE 구문의 옵션

  • Casacade: 참조 값이 사라질 때 함께 삭제된다
  • set Null: 참조 값이 사라질 때 value는 NULL이 된다
create table T
(
	C integer primary key,
    D integer
);

create table S
(
	B integer primary key,
    C integer references T(C) on delete casacade
);

create table R
(
	A integer primary key,
    B integer references S(B) on delete Set NULL
);

delete from T;
select * from R;

>> 실행 결과

AB
1NULL
2NULL

제약 조건의 종류

  • Primary key(기본키)
  • Unique Key(고유키)
  • Not null
  • check
  • Foreign key(외래키)

PK / UniqueKey

  • UNIQUE + NOT NULL = PK
  • UNIQUE는 테이블 내에서 중복되는 값이 없지만, NULL입력이 가능하다.
  • 그러나 여기에 NOT NULL 조건이 붙는 것이 PK이므로, PK는 NULL이 될 수 없다.

FK

  • NULL값을 가질 수 있다
  • 외래키 값은 참조 무결성 제약을 받을 수 있다

외래키 값은 NULL값을 가질 수 없다.(X)
한 테이블에 하나만 존재해야 한다.(X)


Action

DELETE/MODIFY

  • casacade: Master 삭제 시, child 함께 삭제
  • set null: Master 삭제 시, child 해당 필드 NULL
  • set default: Master 삭제 시, child 해당 필드는 Default값으로 설정
  • restrict: child 테이블에 PK값이 없는 경우에만 Master 삭제 허용
  • No action: 아무런 조치를 취하지 않음

INSERT

  • automatic: Master 테이블에 PK가 없는 경우 Master PK를 생성 후 child 입력
  • set null: Master 테이블에 PK가 없는 경우, child 외부키를 NULL값으로 처리
  • set default: Master 테이블에 PK가 없는 경우, child 외부키를 지정된 기본값으로 처리
  • dependent: Master 테이블에 PK가 존재할 때만 child 입력 허용
  • No action: 아무런 조치를 취하지 않음

테이블 생성시 주의 사항

  • 칼럼 뒤에 데이터 타입은 반드시 지정되어야 한다
  • 테이블 명과 칼럼 명은 반드시 문자로 시작해야 하며, 벤더별로 길이에 한계가 있다
  • 벤더에서 사전에 정의한 예약어는 사용할 수 없다
  • 특수문자는 $, _, #만 허용된다

테이블 이름 변경(ANSI 표준)

rename oldName to newName;

삭제

DROPTRUNCATEDELETE
DDLDDL
일부 DML 성격
DML
Rollback 불가Rollback 불가Commit 이전 Rollback
Auto CommitAuto Commit사용자 Commit
테이블이 사용한 모든 Storage를 Release테이블이 사용했던 Storage 중
최초 테이블 생성 시 할당된 Strorage만 남기고 Release
데이터를 모두 Delete해도 사용했던 Storage는 Release되지 않음
테이블의 정의 자체를 삭제
(완전 삭제)
테이블을 최초 생성된 초기 상태로 되돌림
로그를 남기지 않음
데이터만 삭제

데이터베이스 트랜잭션의 네 가지 특성

  1. 원자성(atomicity)
    트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지, 아니면 전혀 실행되지 않은 상태로 남아야만 한다.(All or Nothing)

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

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

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

0개의 댓글