본문 바로가기
Database/MariaDB

MariaDB : DCL (Data Control Language)과 TCL(Transaction Control Language)에 데해서

by 코딩쥐 2024. 10. 17.

DCL

DCL은 Data Control Language 약어로 데이터베이스에서 데이터의 접근과 사용을 제어하는 SQL 명령어이다. 데이터를 보호하기 위한 데이터 보안의 역할을 수행한다. 

  • GRANT : 특정 사용자에게 특정 데이터베이스나 테이블에 대한 권한을 부여한다.
  • REVOKE : 특정 사용자에게 부여된 권한을 취소한다. 
# 해당 테이블에 대한 SELECT, INSERT 권한 부여
GRANT SELECT, INSERT ON 테이블명 TO '사용자';

# 해당 테이블에 대한 권한을 취소
REVOKE INSERT ON 테이블명 FROM '사용자';

 

 

TCL

TCL는 Transaction Control Language로 데이터베이스에서 트랜잭션의 제어를 위해 사용되는 명령어 집합이다. 트랜잭션은 일련의 데이터베이스의 데이터 처리의 한 단위로, 하나의 트랜잭션은 모두 성공적으로 완료되거나 전혀 완료되지 않는 방식으로 처리된다.

예를 들어서 돈을 인출하는 일련의 과정(현금인출명령 - 본인인증 - 현금지급 - 잔액차감) 중에서 하나라도 제대로 처리되지 않을 경우에는 그 과정들이 전부 처리되지 않도록 묶음으로 처리해야한다. 이 묶은 일련의 과정을 트랜잭션이라고 한다. 

  • START TRANSACTION : 트랜잭션 시작을 선언한다. 모든 데이터 변경 작업이 하나의 트랜잭션으로 묶는다.
  • COMMIT : 현재 트랜잭션 내에서 수행한 모든 변경사항을 저장한다.  COMMIT을 실행하면 모든 작업이 완료된 것으로 간주되어 이전 상태로 되돌릴 수 없다. 
    • SELECT @@AUTOCOMMIT; 
      현재 오토커밋의 상태를 확인할 수 있다. ( 1 = true, 0 = false )
      SET AUTOCOMMIT = FALSE;
      오토커밋의 경우에는 각 SQL문이 실행될 때마다 자동으로 트랜잭션이 커밋되기 때문에 FALSE로 사용한다.
  • SAVEPOINT : 트랜잭션 내에서 특정 시점을 설정한다.
  • ROLLBACK  : 현재 트랜잭션에서 수행한 변경사항을 취소하고 마지막 COMMIT, SAVEPOINT로 되돌린다. 
SELECT @@AUTOCOMMIT;
SET AUTOCOMMIT = FALSE;

START TRANSACTION;

INSERT INTO userinfo(ename, gender, age, uloc) VALUES
	('MOANA', 'WOMAN', 20, 'HAWAII'); 
	
UPDATE userinfo SET uloc = 'SEOUL' WHERE ename = 'MILLER';

ROLLBACK;

 

위의 SQL을 실행했을 때 INSERT와 UPDATE 문을 사용했지만, ROLLBACK을 통해서 현재 트랜잭션에서 수행한 변경사항을 취소했기 때문에 userinfo 데이터에 INSERT와 UPDATE가 되지 않은 모습을 볼 수 있다. 

 

SELECT @@AUTOCOMMIT;
SET AUTOCOMMIT = FALSE;

START TRANSACTION;

INSERT INTO userinfo(ename, gender, age, uloc) VALUES
	('MOANA', 'WOMAN', 20, 'HAWAII'); 
	
UPDATE userinfo SET uloc = 'SEOUL' WHERE ename = 'MILLER';

COMMIT; 

ROLLBACK;

 

COMMIT을 사용하고나면 현재 트랜잭션 내에서 수행한 모든 변경사항을 저장했기 때문에 ROLLBACK을 통해서 되돌릴 수 없다. INSERT와 UPDATE가 시행되어 데이터가 들어간 모습을 볼 수 있다.