매일 매일 미라클 코딩
SQLD 오답노트 (4) - SQL 기본 및 활용 본문
SQL 문장들의 종류
명령어의 종류 | 명령어 | 설명 |
데이터 조작어 DML (Data Manipulation Language) |
SELECT INSERT UPDATE DELETE |
데이터 조회 및 변형하는 명령어 |
데이터 정의어 DDL (Data Definition Language) |
CREATE ALTER DROP RENAME |
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어. 테이터 구조를 생성, 변경, 혹은 삭제하거나 이름을 바꾼다 |
데이터 제어어 DCL (Data Control Language) |
GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어 |
트랜잭션 제어어 TCL (Transaction Control Language) |
COMMIT ROLLBACK |
DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어 |
비절차적 / 절차적 데이터 조작어
비절차적 데이터 조작어(DML)는 사용자가 무슨 데이터(What) 를 원하는지 명세
절차적 대이터 조작어 : 어떻게(How) 데이터를 접근해야하는지 명세 -> PL/SQL(오라클), T-SQL(SQL Server)
PK제약조건 생성방법
1) CREATE TABLE 후 ALTER 문으로 제약조건 생성
-> ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY (PK컬럼명); |
2) CREATE TABLE 시 제약조건 생성
-> CREATE TABLE 테이블명 ( 속성1, 속성2, ..., CONSTRAINT 제약조건명 PRIMARY KEY (PK컬럼명) ); |
제약조건
- NOT NULL: 명시적으로 NULL 의 입력을 방지한다
- UNIQUE : 테이블 내에서 중복되는 값이 없어야함 (NULL 허용)
- PK : UNIQUE + NOT NULL = 주 키로 테이블당 1개만 생성 가능하다 (PK에 해당하는 여러 컬럼이 한 개)
- FK : 외래키는 테이블간의 관계를 정의하기 위해 기본키(PK)를 다른테이블의 외래키가 참조하도록 생성. 테이블 생성시 설정할 수 있으며, NULL 값을 허용한다. 한테이블에 여러개 존재할 수 있지만 참조무결성 제약을 받을 수 있다.
- CHECK: 데이터의 무결성을 유지하기 위해 테이블의 특정 컬럼에 설정하는 제약
REFERENCE 옵션
DELETE | CASCADE | 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 외부키를 지정된 default 값으로 입력 | |
DEPENDENT | master 테이블에 PK 가 존재 할때만 child 입력 허용 | |
NO ACTION | 참조무결성을 위반하는 입력 액션을 취하지 않음 |
트랜잭션의 특성
원자성 | 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아있어야 한다. |
일관성 | 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다. |
고립성 | 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다. |
지속성 | 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. |
* 트랜잭션에 대한 격리성이 낮은경우 발생할 수 있는 문제점
- Dirty Read : 다른 트랜잭션에 의 해 수정되었지만 아직 커밋되지 않은 데이터를 읽는것
- Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
- Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상
TRANSACTION 구문
1) 트랜잭션 시작
BEGIN TRANSACTION :
2) 트랜잭션 종료
COMMIT (TRANSACTION ) 혹은 ROLLBACK (TRANSACTION)
3) 지정점(save point) 정의
[Oracle]
SAVEPOINT 포인트명; ROLLBACK TO 포인트명;
[SQL Server]
SAVE TRANSACTION 포인트명;
ROLLBACK TRANSACTION 포인트명;
-> 지정점을 정의하면 현 시점에서 지정점까지 트랜잭션의 일부만 롤백할 수 있다.
Oracle / SQL Server
oracle 의 경우 INSERT 시 공백문자를 입력하면 NULL 로 저장된다
SQL Server 는 공백문자 그대로를 입력값으로 받는다
함수의 종류
- 내장함수 : 함수의 입력 행수에 따라 아래와 같이 구분한다
1) 단일행 함수 : select, where, order by, update set 절에 사용 가능
2) 다중행 함수 : 집계 함수 / 그룹함수 / 윈도우함수
-> 다중행 함수도 단일행함수와 동일하게 단일값을 반환한다
'데이터베이스' 카테고리의 다른 글
SQLD 오답노트(6) - SQL 활용 (0) | 2022.09.03 |
---|---|
SQLD 오답노트 (5) - SQL 기본 및 활용 (0) | 2022.09.02 |
SQLD 오답노트 (3) - 데이터 모델과 성능 (1) | 2022.08.30 |
SQLD 오답노트 (2) - 정규화 반정규화 (0) | 2022.08.24 |
[Lv.3] 프로그래머스 - 헤비유저가 소유한 장소 (0) | 2021.06.29 |