2009-03-24 6 views
7

Есть ли способ с MySQL (5.0), чтобы иметь поле auto_increment, значение которого основано на столбце группировки?auto_increment по группе

Пример:

id name group_field 
1 test 1 
2 test2 1 
1 test3 2 
2 test4 2 
1 test5 3 
2 test6 3 

Я хотел бы, чтобы не пройти через любые «сумасшедшие» методы для того чтобы достигнуть этого, но в случае необходимости.

ответ

14

Для таблиц MyISAM и BDB у вас может быть поле auto_increment в качестве вторичной части ключа, например.

CREATE TABLE foo (
    id   INT AUTO_INCREMENT NOT NULL, 
    group_field INT NOT NULL, 
    name  VARCHAR(128), 

    PRIMARY KEY(group_field, id) 
); 

Вот то, что manual говорит об этом

В этом случае сгенерированное значение для столбец AUTO_INCREMENT будет рассчитывается как MAX (auto_increment_column) + 1, где префикс = данного префикса , Это полезно , если вы хотите поместить данные в список групп.

+0

это тоже работает с таблицами innodb? –

+0

Как только руководство упоминает MyISAM и BDB, я бы не догадался. См. Также http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html –

+0

Можно ли это сделать на не первичный ключ? – BenR

0

Вы можете достичь этого с помощью триггера при вставке, установив max (id) из группы table по полю group_fileld = @inserted_group;