Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Ga0's

SQL 기본(1) 본문

Study IT/SQLD

SQL 기본(1)

Ga0Kwon 2024. 1. 6. 19:17

◆ 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)
);
  • PKUNIQUE(고유)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