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
운영게시판
최근게시물
Sybase Q&A 792 게시물 읽기
No. 792
identity의 적용에 대하여.
작성자
류자현
작성일
2003-12-09 19:57ⓒ
2003-12-09 20:07ⓜ
조회수
5,408

오늘만 벌서 3번째 올리네요.

새로운 DB으로 바꾸는데 이렇게 많은 부분에서 허덕일 줄이야...

 

자동증가 컬럼을 두기 위해 다음과 같이 table을 생성했습니다.

CREATE TABLE GroupBuyPerson (
 groupCode char(12) NOT NULL,
 seqNo numeric identity,
 memberID varchar(20) NOT NULL,
 joinNums numeric NOT NULL,
 joinDate char(8) NOT NULL,
 Primary key (groupCode, seqNo),
)with identity_gap = 1

 

만약 seqNo가 mysql의 auto_increment속성으로 지정되었다고 하고 다음처럼 data를 넣으면

insert into GroupBuyPerson values ('111111111111', 'aaaa', 3, '20031201')

insert into GroupBuyPerson values ('111111111111', 'aaaa', 3, '20031201')

insert into GroupBuyPerson values ('111111111111', 'aaaa', 3, '20031201')

insert into GroupBuyPerson values ('111111111112', 'aaaa', 3, '20031201')

insert into GroupBuyPerson values ('111111111112', 'aaaa', 3, '20031201')

아래처럼 결과과 나옵니다.

'111111111111'        1        'aaaa'        3        '20031201'

'111111111111'        2        'aaaa'        3        '20031201'

'111111111111'        3        'aaaa'        3        '20031201'

'111111111112'        1        'aaaa'        3        '20031201'

'111111111112'        2        'aaaa'        3        '20031201'

 

그런데 sybase에서는 이렇게 나오더군요.

 

'111111111111'        1        'aaaa'        3        '20031201'

'111111111111'        2        'aaaa'        3        '20031201'

'111111111111'        3        'aaaa'        3        '20031201'

'111111111112'        4        'aaaa'        3        '20031201'

'111111111112'        5        'aaaa'        3        '20031201'

 

보시면 아시겠지만 한 컬럼(A)과 자동증가 컬럼(B)이 같이 PK로 잡혔을 경우, mysql에서는 A 컬럼에 새로운 값이 들어오면 B컬럼은 다시 1부터 시작하지만 sybase에서는 그냥 계속 증가한다는 겁니다.

 

sybase의 identity를 mysql의 auto_increment처럼 사용하고 싶은데, 어떻게 설정을 하면 좋을까요.

도움 부탁드립니다.

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

ASE에선 그런 function을 제공하지 않습니다.

왜 그렇게 사용하실려고 하는 지요?

 

굳이 필요하다면

create table test (a char(1) not null ,b int ,c char(10))

create proc sp_test  @a char(1),@c char(10)
as
declare @b int
select @b=count(a)+1 from test where a=@a
insert test values(@a,@b,@c)

이런식으로 sp를 만들어서

exec sp_test 'a','a'
exec sp_test 'a','b'
exec sp_test 'b','a'
exec sp_test 'c','a'
exec sp_test 'c','b'

으로 insert하시면

select * from test order by a,b

a    b           c         
-    ----------- -         
a              1 a         
a              2 b         
b              1 a         
c              1 a         
c              2 b         

이렇게 들어 갑니다.

 

지연님이 2003-12-10 11:10에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
795sybase에서 ERD뽑을 수 있나요?? [1]
박성준
2003-12-10
5074
794sp_dboption 사용했을시 에러 [2]
정이
2003-12-10
3888
793bcp 사용 에러.. [10]
희정
2003-12-10
8160
792identity의 적용에 대하여. [1]
류자현
2003-12-09
5408
791한글문제. [1]
jung
2003-12-09
5175
790drop table, create table [1]
류자현
2003-12-09
5601
789디폴트값 설정 [2]
류자현
2003-12-09
5291
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다