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
운영게시판
최근게시물
DBMS Q&A 1100 게시물 읽기
No. 1100
[sqlite] AUTOINCREMENT field 처리 팁
작성자
Coral
작성일
2005-04-10 12:22
조회수
16,529

방법을 찾다가 기껏 찾은(?) faq에 얼통당토 않은 것이 나와서 좌절하고 있다가 내친김에 만들어 봤습니다.

sequence 테이블에 자동증가될 필드를 정의하는 방식입니다.

테이블 필드 또는 테이블 마다 개별로 만들려다가 테이블 정리가 복잡해질지도 모른 다는 생각에서 한쪽으로 밀어넣어버리기로 한겁니다만, 잘한건지는 모르겠네요.

뭐, 구조는 워낙 단순하니 바꾸면 됩니다만...

 

CREATE TABLE sequence (

key TEXT NOT NULL UNIQUE,

seq INTEGER DEFAULT 1

);

 

####################################################################################

## Category

####################################################################################

CREATE TABLE category (

seq integer NOT NULL UNIQUE DEFAULT 0,

name TEXT NOT NULL UNIQUE,

 

PRIMARY KEY (seq, name)

);

INSERT INTO sequence (key) VALUES ('category_seq');

 

CREATE TRIGGER ia_category AFTER INSERT ON category

FOR EACH ROW BEGIN

UPDATE category SET seq = (SELECT seq FROM sequence WHERE key='category_seq') WHERE name = NEW.name;

UPDATE sequence SET seq = (SELECT max(seq)+1 from category) WHERE key = 'category_seq';

END;

####################################################################################

 

 

더 좋은 방법이 없을까요?

트리거에서 nsw.seq = (SELECT max(seq)+1 from category) 방시으로 하려니 안되더군요.

트리거에서 입력되는 값 자체에 대한 편집이 안되는 모양입니다. - 뭐, 영어를 알아야 등을 기대지... 나원...

 

 

그럼 이상 허접팁 이었습니다.

 

 

인천의 나사 풀린 산호...

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

게시물을 이제 봤네요.

$ sqlite :memory:
SQLite version 2.8.15
Enter ".help" for instructions
sqlite< create table t (seq integer not null primary key, name text);
sqlite< insert into t (name) values ('무');
sqlite< insert into t (name) values ('궁');
sqlite< insert into t (name) values ('화');
sqlite< insert into t (name) values ('꽃');
sqlite< select * from t;
1|무
2|궁
3|화
4|꽃

 

이것이면 족하지 않나요?

그냥 칼럼 정의할 때, integer not null primary key 로 정하면 그놈은 자동으로 시퀀스로 처리하겠다는 것이 sqlite 입장이었습니다. 전통적인 시퀀스는 아니고, MySQL의 auto_increment 속성하고 비슷합니다.

 

김상기(ioseph)님이 2005-04-15 01:28에 작성한 댓글입니다.

에구, 저도 오늘에야 상기님 글을 봤습니다.

적당히 올린만한 곳을 못 찾아 좀 찔리고 있었죠.

 

SQLite 에 있는 FAQ에도 그렇게 나와있더군요.

다만 말씀하신대로 MySQL에서의 시퀸스 정도의 기능이기에 거기에 만족을 못한거였습니다.

 

Coral님이 2005-04-28 05:41에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1107[질문]쇼핑몰 스키마를 설계해서 공부해보려 합니다. [1]
최보라
2005-04-16
13043
1105DBMS의 환경요소와 그 요소에 대하여 간단하게 설명 좀 해주세요..
2005-04-15
10390
1101DB설계한건대..쫌 알려주세요 [3]
임희진
2005-04-10
13039
1100[sqlite] AUTOINCREMENT field 처리 팁 [2]
Coral
2005-04-10
16529
1099여러분들께 도움좀 부탁드립니다.
김유니온
2005-04-08
10243
1098여러분들께 질문이 있습니다!
욱사마
2005-04-07
10464
1097[초보 허접질문] 결국항상 seq를 써야만 하는것인가요? [4]
박기원
2005-04-06
10913
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다