본문 바로가기
TIL

[TIL] 2025-5-26 DML, DCL, TCL

by Enhydra lutris 2025. 5. 28.
728x90

대학시절 처음 DML, DCL을 써봤을때 데이터가 제가 짠 퀄리대로 쏙쏙 나오는게 너무 재밌었어서, 혼자서 이것저것 시도해보면서 배웠던 기억이 있는데요ㅎㅎ

요즘 쿼리문 작성할일이 별로 없었는데 이렇게 강의들으면서 오랜만에 작성해보니까 재밌었습니다~

DML (Data Manipulation Language)

DML은 데이터 조작 언어입니다. 즉, 데이터를 삽입, 조회, 수정, 삭제할 때 사용하는 SQL 명령어입니다.

SELECT - 데이터 조회

SELECT 열 FROM 테이블 WHERE 조건 ORDER BY 정렬기준;
  • SELECT: 어떤 열을 조회할지
  • FROM: 어떤 테이블에서
  • WHERE: 조건이 무엇인지
  • GROUP BY: 데이터를 그룹으로 묶기
  • HAVING: 그룹에 조건 걸기
  • ORDER BY: 정렬 기준 지정
  • LIMIT: 결과 개수 제한

 

뷰(View)

  • 뷰는 가상 테이블입니다. 실제 데이터를 가지지 않고, SELECT 결과처럼 작동합니다.
  • 복잡한 쿼리를 재사용하거나, 보안이 필요한 컬럼을 숨길 때 사용합니다.

 

INSERT - 데이터 삽입

INSERT INTO 테이블 (열1, 열2) VALUES (값1, 값2);
  • INSERT INTO: 어떤 테이블에 데이터를 넣을지
  • VALUES: 어떤 값을 넣을지
  • SELECT 삽입: 다른 쿼리 결과를 그대로 넣을 수 있음

 AUTO_INCREMENT

  • id INT AUTO_INCREMENT PRIMARY KEY 형태로 사용
  • INSERT할 때 값을 생략하면 자동으로 1씩 증가
  • 마지막 증가값은 SELECT LAST_INSERT_ID();로 확인

 

UPDATE - 데이터 수정

UPDATE 테이블 SET 열1 = 값1 WHERE 조건;
  • SET: 어떤 열의 값을 어떻게 바꿀지
  • WHERE: 어느 행을 바꿀지 (❗ 생략하면 모든 행이 수정됨)

 

 DELETE - 데이터 삭제

DELETE FROM 테이블 WHERE 조건;
  • WHERE절 없으면 전체 삭제 주의!
  • 삭제 전 반드시 조건 확인 필요

DCL (Data Control Language)

DCL은 권한 제어 언어입니다. 사용자의 접근 권한을 부여하거나 회수할 수 있습니다. 일반적으로 DBA나 관리자가 사용합니다.

GRANT 권한 부여
REVOKE 권한 회수
 

TCL (Transaction Control Language)

TCL은 트랜잭션 제어 언어입니다. 여러 SQL 문을 하나의 작업 단위로 묶어 처리할 수 있습니다.

COMMIT 모든 변경사항을 저장
ROLLBACK 변경사항을 취소하고 이전 상태로 복원
 
  • MYSQL은 기본적으로 autocommit ON이므로 변경사항이 자동 저장됩니다. 트랜잭션이 필요할 땐 명시적으로 OFF하거나 START TRANSACTION을 사용합니다.

 

무결성 제약조건 (Integrity Constraints)

데이터의 정확성, 일관성, 신뢰성을 보장하기 위한 규칙입니다. 테이블을 정의할 때 **제약조건(Constraints)**을 설정해 잘못된 입력을 막습니다.

NOT NULL NULL 불가
UNIQUE 중복 불가 (NULL은 허용)
PRIMARY KEY NOT NULL + UNIQUE
FOREIGN KEY 다른 테이블의 열 참조
CHECK 특정 조건 만족 시만 입력 가능
DEFAULT 기본값 자동 설정
SELECT * FROM information_schema.table_constraints;
-- 테이블에 설정된 제약조건 목록 확인

 

FOREIGN KEY와 참조 무결성

FOREIGN KEY (dept_id) REFERENCES dept(id)
  • 외래키는 부모 테이블의 PK 또는 UNIQUE 키를 참조합니다.
  • 참조하는 테이블이 먼저 생성되어 있어야 함
  • 참조 컬럼과 자료형이 일치해야 함
 

ON DELETE / ON UPDATE 옵션

NO ACTION 기본값. 참조 중이면 삭제/수정 거부
RESTRICT 참조 중이면 삭제/수정 거부
CASCADE 부모의 삭제/수정이 자식에도 반영
SET NULL 부모 삭제 시 자식의 외래키를 NULL로
SET DEFAULT 부모 삭제 시 자식 값을 기본값으로 변경 (MySQL은 지원 미흡)
 

DEFAULT와 자동 시간 설정

MySQL에서 자주 사용하는 자동 시간 입력 기능입니다.

created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • 레코드가 생성될 때 created_at은 현재 시각 자동 입력
  • 레코드가 수정될 때 updated_at은 자동 갱신됨

댓글