본문 바로가기

DB

MySQL 과 Oracle 자동 증가(PK) 구현 차이/ LIMIT vs ROWNUM – 결과 제한 처리

1. MySQL – AUTO_INCREMENT

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100)
);
  • 레코드 삽입 시 id 자동 증가
  • 별도의 객체 불필요

2. Oracle – SEQUENCE + TRIGGER

Oracle 11g는 AUTO_INCREMENT가 없으므로, 아래 방식 사용

-- 시퀀스 생성
CREATE SEQUENCE user_seq START WITH 1 INCREMENT BY 1;

-- 테이블 생성
CREATE TABLE user (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100)
);

-- 트리거 생성
CREATE OR REPLACE TRIGGER trg_user_id
BEFORE INSERT ON user
FOR EACH ROW
BEGIN
    IF :NEW.id IS NULL THEN
        SELECT user_seq.NEXTVAL INTO :NEW.id FROM dual;
    END IF;
END;
/

이제 INSERT 시 자동으로 번호가 들어갑니다.


📌 정리

  • MySQL: AUTO_INCREMENT로 간단
  • Oracle: 시퀀스+트리거 필요 (11g 이전 필수)

 

 LIMIT vs ROWNUM – 결과 제한 처리

MySQL과 Oracle에서는 조회 결과를 제한하는 방식이 다릅니다.


1. MySQL – LIMIT

SELECT * FROM user LIMIT 10;
SELECT * FROM user LIMIT 10 OFFSET 20;
  • 간단하고 직관적

2. Oracle – ROWNUM

SELECT * FROM user WHERE ROWNUM <= 10;
  • OFFSET 개념 없음
  • 페이징은 서브쿼리로 구현
SELECT * FROM (
    SELECT a.*, ROWNUM rn
    FROM (
        SELECT * FROM user ORDER BY created_at DESC
    ) a
    WHERE ROWNUM <= 30
) WHERE rn > 20;

📌 정리

  • MySQL: LIMIT, OFFSET 간단
  • Oracle: ROWNUM과 서브쿼리 조합 필요