Database
[MSSQL] MSSQL과 MySQL의 트랜잭션, 프로시저, 트리거 기능 차이
JINJINC
2025. 5. 26. 18:19
728x90
반응형
MSSQL과 MySQL의 고급 문법 및 기능 차이
트랜잭션 및 잠금
트랜잭션은 데이터 무결성을 보장하기 위해 중요한 기능입니다. MSSQL과 MySQL 모두 트랜잭션을 지원하지만, 기본 설정과 동작 방식에 차이가 있습니다.
- MSSQL
- 기본적으로 수동 커밋 모드.
BEGIN TRAN
,COMMIT
,ROLLBACK
을 사용하여 명시적으로 트랜잭션 처리.WITH (NOLOCK)
힌트를 통해 읽기 잠금 우회 가능.- 격리 수준은
SET TRANSACTION ISOLATION LEVEL
로 설정 가능.
- MySQL
- 기본적으로 자동 커밋 모드.
START TRANSACTION
,COMMIT
,ROLLBACK
을 사용.- InnoDB 엔진에서만 트랜잭션 및 잠금 지원.
LOCK IN SHARE MODE
,FOR UPDATE
를 통해 명시적 잠금 제어 가능.
-- MSSQL
BEGIN TRAN
UPDATE Accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;
-- MySQL
START TRANSACTION;
UPDATE Accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;
저장 프로시저 및 함수
저장 프로시저는 SQL 문을 캡슐화하여 재사용 가능한 코드로 만드는 방법이며, UDF(사용자 정의 함수)도 지원됩니다.
- MSSQL
- 매개변수는
@
기호 사용. AS BEGIN ... END
구조 사용.- 트랜잭션, 조건문, 예외 처리 (
TRY...CATCH
) 포함 가능.
- 매개변수는
- MySQL
IN
,OUT
,INOUT
파라미터 구분.- 여러 문장을 포함하려면
DELIMITER
설정 필요. - UDF는 단일 값만 반환, 부작용 있는 작업은 제한.
-- MSSQL
CREATE PROCEDURE GetUserById @id INT
AS
BEGIN
SELECT * FROM Users WHERE id = @id;
END
-- MySQL
DELIMITER //
CREATE PROCEDURE GetUserById(IN userId INT)
BEGIN
SELECT * FROM Users WHERE id = userId;
END //
DELIMITER ;
트리거와 이벤트
트리거는 테이블에 대한 DML 이벤트(INSERT, UPDATE, DELETE)에 반응하여 자동으로 실행되는 SQL 코드입니다. 이벤트는 시간 기반으로 실행되는 스케줄 작업입니다.
- MSSQL
AFTER
,INSTEAD OF
트리거 지원.- 복잡한 트리거 로직도
BEGIN...END
블록으로 구성 가능. - 시간 기반 자동 실행은
SQL Server Agent
에서 관리.
- MySQL
BEFORE
,AFTER
트리거만 지원.- 테이블 단위로만 설정 가능.
- 내장
EVENT SCHEDULER
로 주기적인 작업 실행 가능 (예: 매일 로그 정리). SET GLOBAL event_scheduler = ON;
설정 필요.
-- MySQL 이벤트 예시
CREATE EVENT ev_clear_logs
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;
이러한 기능 차이는 단순한 문법을 넘어, 실제 시스템의 트랜잭션 안정성, 작업 자동화, 유지보수 측면에 큰 영향을 미칩니다.
실무에서는 각 DBMS의 특징을 잘 파악하여 기능을 적절히 활용하는 것이 중요합니다.
728x90
반응형