Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 기초] Machbase에서 Sequence 컬럼 사용하기

개요

이번 포스트에서는 Machbase 6.5에 새로 추가될 예정인 Sequence(시퀀스) 기능에 대해서 알아보고자 한다.

시퀀스는 순차적으로 자동으로 증가하는 컬럼을 만들기 위해 사용된다.
순자적으로 증가하여 중복된 값이 없으므로 PK 값으로 활용될 수 있고, 다중 세션을 통해 데이터가 입력된 경우 레코드 별 입력 순서를 판단할 때 사용되기도 한다.

시퀀스 컬럼은 Lookup 테이블에서 생성 가능하며 INT64 (또는 LONG) 타입으로만 생성할 수 있다.

생성방법

시퀀스 컬럼은 테이블 생성 시 컬럼 프로퍼티로 시퀀스 초기값을 지정하여 생성한다.

columnproperty.png

ex1) 기본 생성

Mach> CREATE LOOKUP TABLE lookup_test (seq INT64 PROPERTY(SEQUENCE=1), name VARCHAR(10), value INTEGER);
Created successfully.

테이블 생성 시 시퀀스의 초기값을 지정할 수 있다.

ex2) 초기값을 1000으로 지정

Mach> CREATE LOOKUP TABLE lookup_test (seq INT64 PROPERTY(SEQUENCE=1000), name VARCHAR(10), value INTEGER);
Created successfully.
Mach> SELECT name, nextval FROM m$sys_columns WHERE name = 'SEQ';
name                                                                              nextval                                  
----------------------------------------------------------------------------------------------------------
SEQ                                                                               1000                                     
[1] row(s) selected.

SEQ 컬럼의 초기 시퀀스 값이 1000으로 설정되었음을 알 수 있다.

입력 및 조회

시퀀스 컬럼에 자동으로 1 증가하는 값을 입력하고자 할때는 NEXTVAL() 함수를 이용해야 한다.

Mach> CREATE LOOKUP TABLE lookup_test (seq INT64 PROPERTY(SEQUENCE=1), name VARCHAR(10), value INTEGER);
Created successfully

Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag01', 15);
1 row(s) inserted.
Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag02', 10);
1 row(s) inserted.
Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag03', 30);
1 row(s) inserted.
Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag04', 20);
1 row(s) inserted.
Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag05', 50);
1 row(s) inserted.

Mach> SELECT * FROM lookup_test;
SEQ                  NAME        VALUE
-------------------------------------------------
1                    tag01       15
2                    tag02       10
3                    tag03       30
4                    tag04       20
5                    tag05       50
[5] row(s) selected.

NEXTVAL 함수를 이용하여 입력할 경우 SEQ 컬럼에 자동으로 1 증가한 값이 입력되었음을 알 수 있다.

시퀀스 컬럼에 NEXTVAL 대신 특정 값을 직접 입력할 수 있다.
이러한 경우, 시퀀스 컬럼에 입력된 값 중 가장 큰 값으로 시퀀스 값이 다시 시작된다.

Mach> INSERT INTO lookup_test VALUES (10, 'tag06', 10);
1 row(s) inserted.
Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag07', 25);
1 row(s) inserted.
Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag08', 35);
1 row(s) inserted.
Mach> INSERT INTO lookup_test VALUES (NEXTVAL(seq), 'tag09', 15);
1 row(s) inserted.
 
 
Mach> SELECT * FROM lookup_test;
SEQ                  NAME        VALUE
-------------------------------------------------
1                    tag01       15
2                    tag02       10
3                    tag03       30
4                    tag04       20
5                    tag05       50
10                   tag06       10
11                   tag07       25
12                   tag08       35
13                   tag09       15

SEQ 컬럼에 10을 입력 한 이후에 NEXTVAL 값은 11로 증가했음을 알 수 있다.

다음에 입력될 NEXTVAL 값은 m$sys_columns 테이블 조회를 통해서 알 수 있다.

Mach> SELECT name, nextval FROM m$sys_columns WHERE name = 'SEQ';
name                                                                              nextval
----------------------------------------------------------------------------------------------------------
SEQ                                                                               14

제약사항

시퀀스 컬럼은 다음과 같은 제약사항을 가지고 있다.

  • 시퀀스 컬럼은 Lookup 테이블의 INT64(또는 LONG) 타입의 컬럼에만 생성이 가능하다.
  • NEXTVAL 키워드는 INSERT 구문을 통한 입력시에만 사용할 수 있고, Append를 통한 입력 또는 조회쿼리에서는 사용할 수 없다.

결론

이번 포스트에서는 Machbase 6.5 에 새롭게 추가될 시퀀스 컬럼에 대한 사용법 및 제약사항에 대해 알아보았다.

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을