2012-07-13 5 views
2

sequence 수를 저장하기위한 데이터베이스 테이블을 쉽게 만들 수 있습니다. 이 디자인은 모든 사용자가 sequence을 공유하는 경우에 적합합니다. 내가 원하는 것은 각각의 그룹에 대해 sequence을 생성하는 것입니다.이 group은 데이터베이스 테이블이므로 언제든지 커질 수 있습니다. 즉, 관리자는 언제든지 그룹을 만들 수 있고 사용자는 특정 그룹에 할당됩니다. 그룹에 따라 sequence 세대를 구현하는 방법은 무엇입니까?사용자 그룹별로 시퀀스 번호 데이터베이스를 구현하는 방법은 무엇입니까?

답변

4

당신이

다음은 위의 링크에서 추출 http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

의 MyISAM

를 사용하는 경우. 의 MyISAM 당신이 다중 컬럼 인덱스의 보조 열을 AUTO_INCREMENT를 지정할 수 있습니다 BDB 테이블의 경우

. 이 경우 AUTO_INCREMENT 열에 대해 생성 된 값은 MAX (auto_increment_column) + 1 WHERE prefix = given-prefix로 계산됩니다. 주문한 그룹에 데이터를 넣을 때 유용합니다. 입니다. 귀하의 경우를 들어

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL, 
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (grp,id) 
) ENGINE=MyISAM; 

INSERT INTO animals (grp,name) VALUES 
    ('mammal','dog'),('mammal','cat'), 
    ('bird','penguin'),('fish','lax'),('mammal','whale'), 
    ('bird','ostrich'); 

SELECT * FROM animals ORDER BY grp,id; 
Which returns: 

+--------+----+---------+ 
| grp | id | name | 
+--------+----+---------+ 
| fish | 1 | lax  | 
| mammal | 1 | dog  | 
| mammal | 2 | cat  | 
| mammal | 3 | whale | 
| bird | 1 | penguin | 
| bird | 2 | ostrich | 
+--------+----+---------+ 

:

CREATE TABLE mytable (
    user_id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    group_id MEDIUMINT NOT NULL, 
    user_name CHAR(30) NOT NULL, 
    PRIMARY KEY (group_id,user_id) 
    ) ENGINE=MyISAM; 


INSERT INTO mytable (group_id, user_name) VALUES 
    (1,'alex'),(1,'jenny'),(2,'baz'),(1,'tim'),(2,'danny'),(3,'joe'); 


SELECT * FROM mytable ORDER BY group_id,user_id; 

결과 :

user_id group_id user_name 
1   1   alex 
2   1   jenny 
3   1   tim 
1   2   baz 
2   2   danny 
1   3   joe 
+0

그것은 MEDIUMINT''에 대한 데이터 유형을 설정하는 필수인가? – pheromix

+0

MEDIUMINT 일 필요는 없습니다. – sel

관련 문제