방명록 쿼리를 예시로 한 Maria DB와 Oracle DB 쿼리 차이
큰 차이는 없지만,
데이터 타입, insert문, 페이징에서 다소 차이가 존재함
방명록 페이징 넣어보려다가 MariaDB버전으로 수정했던 DAO 한번 날려먹고
앞으로 cefe24에 DAO올릴 때 까먹지 말라고 정리해본다..
데이터 타입은 예전에 블로그에 정리해둠
https://binscode.tistory.com/51?category=1052619
INSERT에서 차이
-Maria DB(cafe24)
INSERT INTO tb_gbook(gname, content, passwd, ip, grpno, regdt)
VALUES(?, ?, ?, ?, (SELECT ifnull(max(gbookno),0)+1 FROM tb_gbook AS TB), now())
-Oracle DB(myWeb)
INSERT INTO tb_gbook(gbookno, gname, content, passwd, ip, grpno)
VALUES(gbook_seq.nextval, ?, ?, ?, ?, (SELECT NVL(MAX(gbookno), 0)+1 FROM tb_gbook));
-차이점
① 오라클DB는 PK인 gbookno을 시퀀스를 이용해 gbook_seq.nextval로 처리하지만,
마리아DB는 gbookno INT NOT NULL AUTO_INCREMENT
이런식으로 테이블을 생성할 때 자동증가하도록 처리한다
② 현재시스템 날짜 정보를 가져오는 법
오라클DB는 sysdate를 이용해서 default값으로 설정하거나, 쿼리문에 value로 설정하지만
마리아 DB는 now() 함수를 이용한다
페이징에서 차이
-Maria DB(cafe24)
SELECT max(grpno) as maxGno, min(grpno) as minGno
FROM(
SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent, @RNO := @RNO + 1 AS r
FROM(
SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent
FROM tb_gbook WHERE indent=0 ORDER BY gbookno DESC)A, (SELECT @RNO := 0)B
)C
WHERE r>=1 AND r<=5
-Oracle DB(myWeb)
SELECT max(grpno) as maxGno, min(grpno) as minGno
FROM (
SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent, rownum as r
FROM (
SELECT gbookno, gname, content, passwd, ip, grpno, regdt, indent
FROM tb_gbook WHERE indent=0 ORDER BY gbookno DESC
)
)
WHERE r>=6 AND r<=10;
-차이점
① 오라클DB에서 페이징할 때 쓰이는 rownum은 오라클 DB에서만 쓰이는 모조칼럼,
마리아 DB에서는 대신 @RNO := @RNO + 1 AS r 이런 식으로 처리해준다
(오라클DB rownum 관련 포스팅 : https://binscode.tistory.com/60 )
② 오라클DB에서는 서브쿼리된 테이블의 alias를 생략해도 되지만, 마리아DB에서는 안된다고 함
그래서 서브쿼리로 들어간 3개의 테이블에 각각 A, B, C로 alias부여해줌
'Project > myweb_JAVA' 카테고리의 다른 글
05. 답변형 게시판 ③ (게시글 삭제, 게시글 수정, 답변 쓰기) (0) | 2022.07.26 |
---|---|
04. 답변형 게시판 ② (게시글 목록, 게시글 상세보기) (0) | 2022.07.21 |
03. 답변형 게시판 ① (테이블 생성, DTO, DAO, 게시글 쓰기, 유효성 검사) (0) | 2022.07.20 |
02. 인덱스 페이지 및 템플릿 작성 (0) | 2022.07.19 |
01. JAVA기반 My Web 미니 프로젝트 (프로젝트 생성, 환경 설정) (0) | 2022.07.18 |
댓글