2012-07-13 26 views
2

創建一個用於存儲sequence數字的數據庫表很容易;但是這種設計適用於所有用戶共享sequence的事件。我想要爲每個用戶創建sequence:此group可以隨時增長,因爲它是一個數據庫表,即管理員可以隨時創建一個組,並且可以將用戶分配到特定的組。那麼如何按照一組來實現sequence世代呢?如何爲每組用戶實現序列號數據庫?

回答

4

如果你正在使用MyISAM的

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

從上面的鏈接下面提取。

對於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 2012-07-13 08:41:57

+0

沒有必要成爲MEDIUMINT。 – sel 2012-07-13 08:44:06

相關問題