안녕하세요.
# 1.
CREATE TABLE test
(
ai int auto_increment not null,
b varchar(10),
PRIMARY KEY( ai )
) ;
위와 같이 테이블을 만들고, 다음과 같이 INSERT를 합니다.
INSERT INTO test VALUES( 10, \'fff\' ) ;
INSERT INTO test ( b ) VALUES( \'kkk\' ) ;
두번째 INSERT에 의해 발생한 ai는 11이 아닌 1입니다.
이걸 맞춰주기 위해서는 원하는 값만큼 해당 serial의 next_value를 실행해야 합니다.
자동으로 11로 맞춰주는 건 어떨지 싶습니다.
이러한 상황이 발생되는 시나리오는 테이블에 레코드들을 INSERT 문 형태로 백업을 한 뒤에, 테이블을 drop 후에, 해당 INSERT문을 실행시키는 경우입니다....
(unloaddb 후 loaddb는 안 해 봐서 어떻게 작동될지 모르겠습니다.)
자주 발생되는 시나리오가 아니지만, 자주 발생되지 않는 시나리오이기 때문에 복구시에 ai 값을 까먹고 맞춰 놓지 않으면 pk가 충돌되어 app.가 중단되는 경우가 발생되지 않습니다..
# 2.
컬럼이 c1, c2, ... c20 과 같이 20개가 있고, c1이 auto increment라고 가정합니다.
레코드를 수동으로 입력하면서, c1에 auto increment 가 입력되도록 하려면
INSERT INTO tab_name ( c2, c3,c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20)
VALUES
( ... )
와 같이 c1을 제외한 컬럼을 모두 나열해야 합니다.
MySQL처럼
INSERT INTO tab_name VALUES ( NULL, 나머지 컬럼 값들... );
같이 표현하는 것이 편하지 않을까 합니다.
큐브리드가 MySQL 문법을 따라야 하는 건 아니지만, MySQL에서 넘어온 사용자들의 편의를 생각하면 위와 같이 하는 것이 편합니다..
물론 해당 serial의 next_value를 가져와도 되지만, 그렇게 하면 된다는 것을 아는 사람들이 많지는 않을 듯 싶습니다.
감사합니다. 좋은 저녁 되세요~
|