티스토리 뷰
얼마전 프로젝트에서 Cubrid 에서 MySQL로 DB 를 변경해야 했습니다.도메인 규모가 크지 않기에 쉽게 생각했는데 rownum과 sequence 오브젝트를 MySQL 에서는 사용 불가능했습니다. 이미 거의 구축이 끝난 상태인데 몇몇 부분의 수정이 불가피 했죠.
MySQL 에서 rownum과 sequence 대체해보는 방법을 알아보겠습니다.
1.Rownum 사용하기
- Cubrid (as-is)12SELECT rownumFROM [테이블명]
cs - Mysql (to-be)12SELECT (@rownum := @rownum + 1) AS rownumFROM [테이블명], (SELECT @rownum := 0) r;
cs
2.Sequence 사용하기
Cubrid (as -is)
-Next- Mysql (to-be)
-Create Table (Sequence 용)
Mysql 에서는 시퀀스 Object 자체가 존재하지 않기 때문에 시퀀스를 위한 테이블을 생성하고 컬럼속성중에 AUTO_INCREMENT 을 사용해야 됩니다.AUTO_INCREMENT 속성에 컬럼은 반드시 primary key 이여야 하고 다른 pk 컬럼을 허용하지 않습니다.123456789create table [테이블명](sequence int auto_incrementprimary key)engine=InnoDB;cs
-Next
테이블에 한 개의 시퀀스를 저장합니다. value가 0으로 하드코딩 되있지만 실제 insert돼는 값은 순차적으로 증가합니다. 그 이후에 LAST_INSERT_ID() 내장 함수로 insert 한 값을 가져올수 있습니다. LAST_INSERT_ID() 는 세션에 유일하기 때문에 스레드에 안전합니다.12INSERT INTO [테이블명](sequence) VALUES (0);SELECT LAST_INSERT_ID();cs
MyBatis 를 이용할경우 아래와 같이 사용하실수 있습니다. LAST_INSERT_ID() 반환값이 SequenceDto 의 sequence 필드에 담기게 됩니다.
SequenceDto.java1234567891011121314package info.m2sj;public class SequenceDto {private int sequence;public int getSequence() {return sequence;}public void setSequence(int sequence) {this.sequence = sequence;}}cs
generate.xml123456<insert id="generate_seq" parameterType="com.m2sj.SequenceDto">INSERT INTO [테이블명](sequence) VALUES (0)<selectKey keyProperty="sequence" resultType="int">SELECT LAST_INSERT_ID()</selectKey></insert>cs
-Current
현재 시퀀스 값을 가져오기 위해서는 메타 테이블정보를 조회 하시면 됩니다. 메타정보의 값은 현재값이 아닌 next 정보가 있기 때문에 -1 을 해주셔야 됩니다.1234567SELECT AUTO_INCREMENT - 1FROMinformation_schema.tablesWHEREtable_schema = DATABASE()AND table_name = '[테이블명]';cs
Mysql 에서 rownum 과 sequence 사용법을 알아 보았습니다. 이와 별개로 mysql 에서는 대소문자 구분을 하기 때문에 sql 문이 대문자로만 돼있다면 전부 변경해야 됩니다.(mysql에 대소문자 구분을 ignore 하는 옵션이 있지만 권장하지는 않습니다.)
'Web Development' 카테고리의 다른 글
자바에서 CIDR 주소체계 계산을 도와주는 SubnetUtils (2) | 2018.03.20 |
---|---|
[Spring] Constructor Dependency Injection (생성자 의존성 주입) (0) | 2018.03.05 |
[스프링 부트] 프로퍼티 파일에 필드 암호화 (Jasypt) (0) | 2018.01.25 |
[Tool] 무료 온라인 이미지 편집 Vectr (0) | 2018.01.25 |
[Git] 윈도우에서 gitignore 파일 만들기 (0) | 2018.01.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크