SQL, 제약조건

KoK·2025년 10월 1일

DATABASE

목록 보기
5/6
post-thumbnail

1. SQL

앞서 CREATE , INSERT , SELECT 같은 몇 가지 영어 단어로 데이터베이스를 다뤄봤다. 이 명령어들의 집합이 바로 SQL(Structured Query Language), '구조화된 질의 언어'다.

  • SQL은 국제 표준 기구(ISO/ANSI)에 의해 표준이 정해진
    관계형 데이터베이스의 표준 언어 다. 대부분의 관계형 데이터베이스는 이 표준 SQL을 지원한다. 각 데이터베이스마다 자신들만의 추가기능이나 약간의 문법 차이는 있지만, CREATE , SELECT , INSERT 와 같은 핵심적인 문법은 거의 동일하다.

데이터베이스 방언(Dialect)
SQL 표준을 넘어서 각 DBMS는 자신들만의 추가 기능이나 추가 문법을 제공하는데, 이것을 방언(사투리,
Dialect)라고 한다.

  • SQL의 또 다른 중요한 특징은 선언적 언어 라는 점이다.
    우리는 데이터베이스에게
    '어떻게(How)'
    데이터를 가져올지 지시하는 것이 아니라,
    '무엇을(What)'
    원하는지만 선언적으로 명시한다는 뜻이다.

2. SQL 명령어의 4가지 종류

2-1. DDL (Data Definition Language, 데이터 정의어)

  • 목적: 데이터의 '구조'를 정의하고 관리하는 언어다. 데이터 그 자체가 아니라, 데이터를 담을 그릇(테이블)이
    나 창고(데이터베이스)의 설계도를 만들고, 수정하고, 제거하는 역할을 한다.
  • 주요 명령어:
    CREATE : 데이터베이스, 테이블 등의 구조를 생성한다.
    ALTER : 이미 만들어진 테이블의 구조를 변경한다. (이후에 학습한다.)
    DROP : 데이터베이스, 테이블을 완전히 삭제한다.

2-2. DML (Data Manipulation Language, 데이터 조작어)

  • 목적: 테이블 안에 들어있는 실제 '데이터'를 직접 조작(추가, 조회, 수정, 삭제)하는 언어다. SQL에서 가장
    빈번하게 사용되는 명령어들이 여기에 속한다.
  • 주요 명령어:
    INSERT : 테이블에 새로운 데이터를 추가한다.
    SELECT : 테이블에서 데이터를 조회(검색)한다.
    UPDATE : 기존 데이터를 수정한다.
    DELETE : 기존 데이터를 삭제한다.

2-3. DCL (Data Control Language, 데이터 제어어)**

  • 목적: 데이터에 대한 접근 권한을 부여(GRANT )하거나 회수(REVOKE )하는 등, 데이터의 보안과 관련된 권
    한을 제어한다.
  • 주요 명령어:
    GRANT : 특정 사용자에게 특정 작업에 대한 수행 권한을 부여한다.
    REVOKE : 특정 사용자에게서 이미 부여한 권한을 회수한다.

2-4. TCL (Transaction Control Language, 트랜잭션 제어어)**

  • 목적: DML에 의해 수행된 데이터 변경 작업들을 하나의 '거래(Transaction)' 단위로 묶어서 관리하는 언어
    다. 작업의 일관성을 보장하여 데이터가 잘못되는 것을 방지한다.
  • 주요 명령어:
    COMMIT : 트랜잭션의 모든 작업을 최종적으로 데이터베이스에 확정, 저장한다.
    ROLLBACK : 트랜잭션의 모든 작업을 취소하고 이전 상태로 되돌린다.

SQL은 데이터를 조회하는 언어를 넘어, 데이터의 구조를 정의하고(DDL), 실제 데이터를 조작하며 (DML), 접근 권한을 제어하고(DCL), 작업의 안정성을 보장하는(TCL) 매우 체계적이고 강력한 언어 체계다.


3. 제약조건

제약 조건은 테이블에 데이터를 저장할 때, 특정 규칙을 지키도록 강제하는 장치다. 이 규칙 덕분에 우리는 잘못되거나 일관성 없는 데이터가 입력되는 것을 원천적으로 차단할 수 있다. 데이터의 무결성이 제약 조건의 핵심 목표다.

  • NOT NULL : 필수 입력 항목 지정
    이 제약 조건이 걸린 열에는 NULL 값(값이 없음)을 허용하지 않는다. 즉, 데이터를 INSERT 할 때 이 열의 값은 반드시 입력되어야 한다. 고객의 이름, 아이디, 상품의 가격 등은 비어있으면 안 되는 핵심 정보이므로 NOT NULL 을 설정해야 한다.

  • UNIQUE : 중복 불가 항목 지정
    이 제약조건이 걸린 열의 값은 테이블 내에서 항상 고유해야 한다.(중복허용X) 고객ID, 이메일주소 등은 다른사람과 중복되면 안되기 때문에 UNIQUE제약조건을 사용한다.
    PRIMARY KEY 와의 차이점 : PRIMARY KEY 는 테이블 당 하나만 존재할 수 있지만, UNIQUE는 여러 열에 설정가능하다. PRIMARY KEYUNIQUENOT NULL 속성을 모두 포함하는 개념이다.

  • PRIMARY KEY : 테이블의 대표 식별자
    테이블의 모든 행을 유일하게 식별하는 열. NOT NULLUNIQUE 의 특징을 모두 가진다. 모든 테이블에는 반드시 PRIMARY KEY 가 있어야 한다.
    AUTO_INCREMENT : MySQL에서 PRIMARY KEY 에 자주 사용하는 옵션이다. 정수 타입의 PRIMARY KEY
    열에 이 옵션을 설정하면, 새로운 데이터가 추가될 때마다 1씩 자동으로 증가하는 번호를 할당해 준다. 직접 ID를 고민해서 넣을 필요가 없어 매우 편리하다.

  • FOREIGN KEY (FK) : 테이블 간의 관계 설정
    한 테이블을 다른 테이블과 연결하는 관계의 고리 참조하는 열의 값은 반드시 참조되는 테이블의 PRIMARY KEY 값 중 하나여야 한다는 참조 무결성을 강제한다.

  • DEFAULT : 기본값 설정
    데이터를 INSERT 할 때 특정 열의 값을 명시하지 않으면, 자동으로 설정된 기본 값이 입력된다.

  • CHECK : 컬럼에 입력되는 값이 특정 조건을 만족하는지 검사
    조건에 맞지 않는 데이터의 입력을 막는다.
    10보다 작은 숫자가 입력되지 않도록 막는다.
    18세 미만의 회원이 저장되지 않도록 막는다.

profile
개발 이것저것

0개의 댓글