2

sequence创建用于存储数字的数据库表很容易;但是这种设计适合sequence所有用户共享的事件。我想要的是sequence为每个用户创建:这group可以随时增长,因为它是一个数据库表,即管理员可以随时创建一个组,并将用户分配到一个特定的组。那么如何实现sequence按组生成呢?

4

1 回答 1

4

如果您使用的是 myisam

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

下面从上面的链接中提取。

对于 MyISAM 和 BDB 表,您可以在多列索引中的辅助列上指定 AUTO_INCREMENT。在这种情况下,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
于 2012-07-13T08:12:54.193 回答