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
    
    
  반응형
    
    
    
  'Database' 카테고리의 다른 글
| [MSSQL] MSSQL과 MySQL의 성능과 효율성 (0) | 2025.05.26 | 
|---|---|
| [MSSQL] MSSQL 문자열 타입 (0) | 2025.05.26 | 
| [MSSQL] MSSQL과 MySQL의 문법 및 기능 비교 (0) | 2025.05.26 | 
댓글