database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
ㆍCUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
CUBRID Q&A 966 게시물 읽기
No. 966
Q.AUTO INCREMENT 컬럼에 대해.
작성자
inos
작성일
2008-02-28 19:03:17
조회수
3,340

안녕하세요.

 

 

# 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를 가져와도 되지만, 그렇게 하면 된다는 것을 아는 사람들이 많지는 않을 듯 싶습니다.

 

감사합니다. 좋은 저녁 되세요~

 

 

이 글에 대한 댓글이 총 1건 있습니다.

말씀하신 의견을 내부적으로 검토하여 적용 여부를 결정하도록 하겠습니다.

 

 

>안녕하세요.

>

>

># 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를 가져와도 되지만, 그렇게 하면 된다는 것을 아는 사람들이 많지는 않을 듯 싶습니다.

>

>감사합니다. 좋은 저녁 되세요~

 

손승일님이 2008-02-29 12:58:06에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
969Q.DB 리스트 가져오는 방법 [2]
한호
2008-03-03
3314
968Q.데비안 지원 여부 [2]
cacus
2008-02-29
3142
967Q.ODBC API함수 사용관련 질문이여~ [1]
박유나
2008-02-29
3259
966Q.AUTO INCREMENT 컬럼에 대해. [1]
inos
2008-02-28
3340
965Q.새로 생성한 테이블의 위치도 바뀝니다 [1]
초짜
2008-02-28
3001
964Q.큐브리드 매니저로 primary key 생성이 안되나요? [1]
김기욱
2008-02-28
3500
963Q.잘알겠읍니다. 그럼 매니져가 생성했을때라도 지울수없을까요? [1]
초짜
2008-02-28
2985
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.082초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다