Ga0's
SQL 기본(1) 본문
◆ SQL에서 의미하는 NULL(널)
- 아직 정의되지 않은 미지의 값(=알 수 없는 값)
- 값의 부재
- NULL과의 모든 비교(IS NULL 제외)는 알 수 없음(Unknown)을 반환
- -> 공백(아스키 : 48)이나 숫자 0(아스키 : 32)은 아스키코드 값을 가진 값으로써 NULL(아스키 : 00)과는 다르다
◆ 테이블 생성시 컬럼별 생성 가능한 제약조건에 대한 설명
- 테이블은 하나의 PRIMARY KEY 제약 조건만 가질 수 있음 -> 각 행을 고유하게 식별하는 주요 키가 하나만 허용된다는 것을 의미 그러나 주요 키 자체는 하나의 열이 아닌 여러 열로 구성될 수 있습니다. 이것을 복합(primary) 키라고 함.
CREATE TABLE 복합키를_가지는_테이블 (
id1 NUMBER,
id2 NUMBER,
name VARCHAR2(50),
age NUMBER,
CONSTRAINT pk_comp_key PRIMARY KEY (id1, id2)
);
- PK는 UNIQUE(고유)와 NOT NULL 특징을 가짐
- UNIQUE는 테이블 내에서 중복되는 값이 없지만, NULL 입력이 가능
- FK는 외래키로 테이블당 여러 개 생성이 가능
- NOT NULL은 명시적으로 NULL 입력을 방지
◆ 외래키에 대한 설명
- 테이블 생성시 설정 가능
- 외래키 값은 널 값을 가질 수 있다.
- 한 테이블에 여러 개 존재 가능
- 외래키 값은 참조 무결성 제약을 받을 수 있음
◆ 테이블의 불필요한 칼럼 삭제하는 SQL문
ALTER TABLE 테이블명
DROP COLUMN 삭제할_칼럼명;
◆ 테이블 이름 변경하는 SQL문
RENAME 기존테이블명 TO 바꿀테이블명;
◆ DELETE ACTION
- Cascade : Master 삭제 시 Child도 같이 삭제
- Set Null : Masteer 삭제 시 Child 해당 필드 Null
- Set Default : Master 삭제 시 Child 해당 필드 Default 값으로 설정
- Restrict : Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용
- No Action : 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음
◆ INSERT ACTION
- Automatic : Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력
- Set Null : Master 테이블에 PK가 없는 경우 Child 외부키를 Null 값으로 처리
- Set Default : Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력
- Dependent : Master 테이블에 PK가 존재할 때만 Child 입력 허용
- No Action : 참조무결성을 위반하는 입력 액션을 취하지 않음
◆ 테이블에 입력된 데이터 조회
- ALL : Default 옵션이므로 별도로 표시하지 않아도 되며, 중복된 데이터가 있어도 모두 출력된다.
SELECT ALL 칼럼명1, 칼럼명2
FROM 테이블명
- DISTINCT : 중복된 데이터가 있는 경우 1건으로 처리하여 출력(중복 제거)
SELECT DISTINCT 칼럼명1, 칼럼명2
FROM 테이블명;
◆ 삭제 관련 SQL
- TRUNCATE TABLE
- 테이블의 모든 데이터를 삭제
- 테이블 구조는 그대로 유지
- 모든 행을 빠르게 제거하는 데 사용
- 트랜잭션 로그는 유지
- 테이블의 구조는 유지
- 시퀀스 및 제약 조건도 보존
- 로그를 남기지 않음
- DROP TABLE
- 테이블 자체를 완전히 삭제
- 테이블 구조 및 데이터 모두 손실
- 테이블을 완전히 제거하는 데 사용
- 테이블이 삭제되면 해당 테이블에 포함된 모든 데이터, 인덱스, 제약 조건, 트리거 등이 영구적으로 손실\
- 로그를 남기지 않음
- DELETE FROM TABLE
- 테이블에서 특정 조건을 만족하는 행만 삭제
- 특정 조건을 만족하는 행만 삭제하는 데 사용
- 테이블의 구조는 그대로 유지
- 삭제된 행에 해당하는 데이터는 영구적으로 손실
◆ 트랜잭션 (Transaction)
- 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 의미
◆ 트랜잭션의 특성
- 원자성(automicity) : 트랜잭션에 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아야 함
- 일관성(consistency) : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안됨
- 고립성(isolation) : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어선 안됨
- 지속성(duraboility) : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장됨
◆ 격리성이 낮은 트랜잭션에 대한 문제점
- Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
- Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나오는 현상
- Phantom Read : 한 트랜잭션 내에 같은 쿼리를 두 번 수행했는데 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상
'Study IT > SQLD' 카테고리의 다른 글
SQL 기본(3) (0) | 2024.01.27 |
---|---|
SQL 기본(2) (2) | 2024.01.13 |
데이터 모델과 성능 (2) | 2024.01.04 |
데이터 모델링의 이해 (1) | 2024.01.02 |
SQLD_분산 데이터베이스와 성능 (0) | 2023.05.03 |