2009-03-24 4 views
7

C'è un modo con MySQL (5.0 specificamente) per avere un campo auto_increment il cui valore è basato su una colonna di raggruppamento?auto_increment per gruppo

Esempio:

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

mi piacerebbe non dover passare attraverso tutti i metodi 'pazzo' per raggiungere questo obiettivo, ma lo farò se necessario.

risposta

14

Per le tabelle MyISAM e BDB è possibile avere un campo auto_increment come parte secondaria della chiave, ad es.

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

    PRIMARY KEY(group_field, id) 
); 

Ecco cosa manual dice su questi

In questo caso, il valore generato per la colonna AUTO_INCREMENT viene calcolato come MAX (auto_increment_column) + 1 WHERE prefix = data-prefix . È utile quando si desidera inserire i dati nei gruppi ordinati .

+0

funziona anche con tabelle innodb? –

+0

Come il manuale menziona solo MyISAM e BDB, direi di no. Vedi anche http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html –

+0

Questo può essere fatto su una chiave non primaria? – BenR

0

È possibile ottenere ciò con trigger su insert, impostando max (id) da gruppo tabella per group_field con group_fileld = @inserted_group;