자격증

SQLD - 5. 관리구문

Beekei 2025. 5. 30. 16:20
반응형

DML(Data Manipulation Language)

  • 테이블에 레코드를 추가, 변경, 삭제 등 데이터를 조작하는 작업을 수행하는 SQL 명령어
  • DDL과 달리 자동커밋(AUTOCOMMIT)되지 않고 명시적으로 커밋(COMMIT)을 실행
  • 커밋 전에는 롤백(ROLLBACK)이 가능하며 해당 데이터를 조회할 때는 변경 사항이 보이지 않음

INSERT

  • 테이블에 레코드를 추가하는 명령어
  • 테이블의 칼럼 목록을 기입 없이 VALUES만으로 행을 추가할 때는 테이블의 칼럼 수와 VALUES 인수의 개수가 같아야 함
INSERT INTO 테이블 칼럼1, 칼럼2, 칼럼3 ... VALUES(데이터1, 데이터2, 데이터3 ...);
INSERT INTO 테이블 VALUES(데이터1, 데이터2, 데이터3 ...);

UPDATE

  • 기존의 레코드를 수정하는 명령어
  • WHERE절은 생략 가능하지만 전체 데이터를 대상으로 수정됨
UPDATE 테이블 SET 칼럼1 = 데이터1, 컬럼2 = 데이터2 ... WHERE 조건

DELETE

  • 기존의 레코드를 삭제하는 명령어
  • TRUNCATE는 작업취소(UNDO)를 위한 데이터를 생성하지 않아 속도가 빠르고 디스크 공간을 릴리즈(Release)하여 재사용이 가능
  • DELETE는 로그를 남기며 롤백이 가능
DELETE FROM 테이블 WHERE 조건 # WHERE절은 생략 가능하지만 전체 데이터가 삭제됨

MERGE

  • 테이블 단위로 데이터를 갱신하는 명령어
  • 두 테이블을 비교하여 특정 조건에 맞는 레코드에 대해서는 UPDATE문을 그렇지 않은 레코드는 INSERT문 실행
  • 테이블의 변경 사항을 백업 테이블에 반영하거나 개발을 위해 추가, 변경된 건을 운영 환경에 적용할 때 사용 가능
MERGE INTO 테이블1 USING 테이블2 # 테이블2의 변경사항을 테이블1에 반영
ON 조건
WHEN MATCHED THEN # ON절 조건에 만족하면
    UPDATE SET  테이블1.칼럼1 = 테이블2.칼럼1, 테이블1.칼럼2 = 테이블2.칼럼2, 테이블1.칼럼3 = 테이블2.칼럼3
    DELETE WHERE 테이블1.칼럼1 = 값1 # 해당 DELETE절은 위에서 UPDATE절에 의해 갱신된 데이터에만 적용(갱신된 데이터 기준)
WHEN NOT MATCHED THEN # ON절 조건에 만족하지 않으면
    INSERT (테이블1.칼럼1, 테이블1.칼럼2, 테이블1.칼럼3) VALUES (테이블2.칼럼1, 테이블2.칼럼2, 테이블2.칼럼3);

TCL(Transaction Control Language)

  • 트랜잭션을 제어하는 SLQ 명령어
  • INSERT, UPDATE, DELETE 등의 명령들을 하나의 트랜잭션으로 묶어서 처리하거나 취소할 수 있는 명령어를 제공

트랜잭션의 특징

  • 원자성(Atomicity): 하나의 트랜잭션에 묶인 연산들은 모두 실행되든지 전혀 실행되지 않아야 함(All or Nothing)
  • 일관성(Consistency): 트랜잭션의 결과는 DB 정합성을 깨지 않음, 트랜잭션 이전에 오류가 없다면 이후에도 오류가 없음
  • 고립성(Isolation): 트랜잭션은 독립적으로 수행되며 다른 트랜잭션이 중간에 간섭하거나 영향을 미치지 않음
  • 영속성(Durability): 트랜잭션의 결과는 DB에 영구적으로 저장되고 유지됨

COMMIT

  • INSERT, UPDATE, DELETE와 같은 DML 명령들을 통한 변경사항을 DB에 영구적으로 반영하고 락을 해제하여 트랜잭션을 완료
BEGIN TRANSACTION;
INSERT ~
UPDATE ~
DELETE ~
COMMIT;

ROLLBACK

  • 이전의 커밋 이후 새로운 트랜잭션에 포함되는 전체 변경사항 또는 지정된 저장점(SAVEPOINT) 이후의 변경사항을 취소하고 복원(커밋 후의 변경사항은 롤백 불가)
  • DDL 명령어는 자동커밋이 되므로 롤백이 불가하지만 INSERT, UPDATE, DELETE와 같은 DML 명령어는 자동커밋이 되지 않아 롤백이 가능(Oracle 기준)
BEGIN TRANSACTION;
INSERT ~
UPDATE ~
DELETE ~
ROLLBACK;

SAVEPOINT

  • 롤백을 위한 저장점을 지정
  • 트랜잭션에 포함되는 전체 변경사항이 취소되는 것이 아닌 저장점 이후에 해당하는 변경사항만 취소
# Oracle
SAVEPOINT 이름;
ROLLBACK TO 이름;

#SQL Server
SAVE TRANSACTION 이름;
ROLLBACK TRANSACTION 이름;

DDL(Data Definition Language)

  • 스키마를 정의하고 관리하는 SQL 명령어
  • ERD로 그려진 데이터 모델링은 논리적 모델링, DDL을 사용해서 DBMS에 적용하는 것은 물리적 모델링
  • DDL에서 저장해야 할 요소
    • 테이블 이름: 테이블의 이름을 지정
    • 칼럼 이름: 테이블을 구성하는 칼럼 이름 지정
    • 칼럼 데이터 타입: 각 컬럼의 데이터 타입 지정
    • 칼럼 데이터 크기: 각 컬럼의 데이터 크기 지정
    • 제약조건(Constraints): PK, NOT NULL 등 칼럼이 가지는 제약조건 지정

CREATE

  • 테이블을 생성하는 명령어
  • 테이블의 이름은 DB 내에서 고유, 칼럼 이름은 해당 테이블 내에서 고유
  • 테이블의 이름은 담는 데이터의 성격에 맞는 이름으로, 칼럼의 이름은 통일성을 생각하여 지정
  • 테이블, 칼럼, 제약조건의 이름은 숫자로 시작될 수 없고 A-Z, a-z, 0-9, _, $, # 문자만 사용 가능
CREATE TABLE 테이블1 (
    칼럼1 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL, 
    칼럼2 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL,
    칼럼3 데이터타입(데이터크기), # DEFAULT, NULL / NOT NULL 생략 가능 (기본값은 NULL 값으로 설정)
    ... ,
    CONSTRAINT 이름1 PRIMARY KEY (칼럼1), # 제약조건 지정
    CONSTRAINT 이름2 FOREIGN KEY (칼럼2) REFERENCES 테이블2(칼럼4),
)

PRIMARY KEY

  • PK 칼럼을 지정
  • 모든 행의 값이 고유(Unique)해야하고 NULL 값을 가질 수 없음
  • 자동으로 UNIQUE INDEX 생성

FOREIGN KEY

  • FK(외래키) 칼럼을 지정
  • 다른 테이블의 PK로부터 가져온 칼럼을 지정
  • 논리적 모델링에서 정의한 관계(Relationship)를 표현
  • 참조 대상인 칼럼에 대해서 참조 무결성 제약조건을 지정 가능(일관성이 깨지는 것을 DBMS 차원에서 방지)

DELETE/MODIFY ACTION 

제약조건 설명
CASCADE 부모의 값 삭제 시 자식의 값도 삭제
SET NULL 부모의 값 삭제 시 자식의 값은 NULL
SET DEFAULT 부모의 값 삭제 시 자식의 해당 컬럼은 기본값
RESTRICT 자식 테이블에 해당 데이터가 PK로 지정되지 않은 경우에만 부모 테이블에서 삭제 및 수정 가능
NO ACTION 제약조건을 위배한 경우 동작이 실패하며 아무런 액션되 취하지 않음

 

INSERT ACTION

제약조건 설명
AUTOMATIC 부모 테이블에 PK가 없는 경우 PK 생성 후 자식 테이블에 값 입력
SET NULL 부모 테이블에 PK가 없는 경우 자식 테이블에 NULL값 입력
SET DEFAULT 부모 테이블에 PK가 없는 경우 자식 테이블에 기본값 입력
DEPENDENT 부모 테이블에 PK가 존재할 때만 자식 테이블에 값 입력을 허용
NO ACTION 제약조건을 위배한 경우 동작이 실패하며 아무런 액션되 취하지 않음

UNIQUE KEY

  • 모든 값이 고유해야 하는 조건 지정
  • PK와 달리 NULL값 허용

NOT NULL

  • NULL 값을 가질 수 없도록 지정
  • NULL이 입력되는 경우 오류 발생

CHECK

  • 가질 수 있는 값을 특정 범위로 제한
CONSTRAINT CHK_GENDER CHECK(GENDER IN 'M', 'F')) # 성별값 제한

ALTER

  • 생성되어 있는 테이블의 스키마를 변경하는 명령어

칼럼 추가

  • 기존 칼럼들의 끝에 추가됨
ALTER TABLE 테이블 ADD 칼럼 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL;

칼럼 삭제

  • ALTER로 삭제한 칼럼은 복구 불가
ALTER TABLE 테이블 DROP COLUMN 칼럼;

칼럼 변경

  • 데이터 타입 변경 시 칼럼에 저장된 테이터가 없을 경우에만 수정 가능
  • 데이터 크기 감소 시 기존 데이터를 모두 담을 수 있는 경우에만 수정 가능
  • DEFAULT 설정 시 변경 이후에 추가되는 레코드에만 적용
  • NOT NULL 설정 시 현재 칼럼의 값 중에 NULL이 없는 경우에만 수정 가능
ALTER TABLE 테이블 MODIFY(
    칼럼1 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL,
    칼럼2 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL,
    ...
)

# SQL Server은 아래 명령어 형식을 따르며 여러 칼럼을 동시에 수정할 수 없음
ALTER TABLE 테이블 ALTER COLUMN 칼럼1 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL;
ALTER TABLE 테이블 ALTER COLUMN 칼럼2 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL;
...

칼럼 이름 변경

ALTER TABLE 테이블 RENAME COLUMN 칼럼1 TO 칼럼2;

제약조건 추가

ALTER TABLE 테이블 ADD CONSTRAINT 이름 제약조건(컬럼);

테이블 삭제

  • 다른 테이블에서 삭제할 테이블을 참조하고 있는 경우 CASCADE CONSTRAINTS를 명시하지 않으면 오류가 발생해 삭제 불가
DROP TABLE 테이블 CASCADE CONSTRAINTS;

테이블 초기화

  • 테이블의 데이터만 초기화
  • DELETE와 달리 롤백이 불가능하고 저장 공간이 릴리즈(Release)됨
TRUNCATE TABLE 테이블;

DROP, TRUNCATE, DELETE의 차이

  DROP TRUNCATE DELETE
문법 DROP TABLE 테이블 TRUNCATE TABLE 테이블 DELETE FROM 테이블
SQL 종류 DDL DDL DML
동작 스키마까지 삭제 테이블 생성 초기 상태로 초기화
(데이터만 삭제)
데이터만 삭제
자동커밋 여부
디스크 공간 릴리즈
작업취소(UNDO)를 위한
로그 데이터 생성 여부

DCL(Data Control Language)

  • 사용자를 생성하고 권한을 부여하는 작업을 수행하는 SQL 명령어

USER 관련 명령어

  • DB 생성 후 데이터를 읽고 쓰기 위해 계정(USER)를 생성하고 변경, 삭제하는 명령어

USER 생성

  • 같은 이름으로 생성된 계정이 존재할 경우 오류 발생
CREATE USER 사용자 IDENTIFIED BY 패스워드;

USER 변경

ALTER USER 사용자 IDENTIFIED BY 패스워드;

USER 삭제

DROP USER 사용자;

권한 관련 명령어

  • DB에 대한 접근(읽기, 쓰기) 권한을 부여하는 명령어

GRANT

  • 권한을 부여하는 명령어
  • 특정 테이블에 대해서만 권한을 부여하려면 ON 옵션 지정
  • WITH GRANT OPTION 지정 시 권한을 받은 사용자가 다른 사용자에게 자신의 권한 부여 가능
GRANT 권한 ON 테이블 TO 사용자 WITH GRANT OPTION;

GRANT CREATE SESSION TO 사용자; # 데이터베이스 접속 권한 부여
GRANT ALTER SESSION TO 사용자; # 데이터베이스 접속 상태에서 환경 값 변경 권한 부여
GRANT CREATE USER TO 사용자; # 사용자 생성 권한 부여
GRANT ALTER USER TO 사용자; # 사용자 정보 변경 권한 부여
GRANT DROP USER TO 사용자; # 사용자 삭제 권한 부여
GRANT CREATE TABLE TO 사용자; # 테이블 생성 권한 부여
GRANT CREATE ANY TABLE TO 사용자; # 임의의 스키마 소유 테이블 생성 권한 부여

REVOKE

  • 권한을 회수하는 명령어
  • 특정 테이블에 대해서만 권한을 회수하려면 ON 옵션 지정
  • RESTRICT: 해당 권한을 회수할 때 의존적인 다른 권한이 존재하는 경우 명령이 수행되지 않음
  • CASCADE: 해당 권한을 회수할 때 의존적인 다른 권한까지 함께 회수
REVOKE 권한 ON 테이블 FROM 사용자 RESTRICT / CASCADE;

REVOKE CREATE SESSION FROM 사용자; # 데이터베이스 접속 권한 회수
REVOKE ALTER SESSION FROM 사용자; # 데이터베이스 접속 상태에서 환경 값 변경 권한 회수
REVOKE CREATE USER FROM 사용자; # 사용자 생성 권한 회수
REVOKE ALTER USER FROM 사용자; # 사용자 정보 변경 권한 회수
REVOKE DROP USER FROM 사용자; # 사용자 삭제 권한 회수
REVOKE CREATE TABLE FROM 사용자; # 테이블 생성 권한 회수
REVOKE CREATE ANY TABLE FROM 사용자; # 임의의 스키마 소유 테이블 생성 권한 회수

ROLE 관련 명령어

  • 많은 권한들을 각각 따로 부여하지 않고, 몇 가지의 권한을 묶어서 패키지 형태(ROLE)로 부여하는 명령어
CREATE ROLE ROLE_MANAGER; # ROLE_MANAGER이라는 이름의 ROLE 생성
GRANT CREATE SESSION, CREATE TABLE, CREATE USER TO ROLE_MANAGER; # 생성된 ROLE_MANAGER에 여러가지 권한 부여
GRANT ROLE_MANAGER TO 사용자; # ROLE_MANAGER을 사용자에게 부여
반응형