2009-03-24 16 views
7

¿Hay alguna manera con MySQL (5.0 específicamente) de tener un campo auto_increment cuyo valor se base en una columna de agrupación?auto_increment por grupo

Ejemplo:

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

me gustaría no tener que ir a través de cualquier método 'locos' a achive esto, pero lo hará si es necesario.

Respuesta

14

Para las tablas MyISAM y BDB, puede tener un campo auto_increment como parte secundaria de la clave, p. Ej.

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

    PRIMARY KEY(group_field, id) 
); 

Aquí es lo que el manual dice acerca de este

En este caso, el valor generado para la columna AUTO_INCREMENT se calcula como MAX (auto_increment_column) + 1 DONDE prefijo = dado-prefix . Esto es útil cuando desea colocar datos en grupos ordenados .

+0

¿Funciona esto también con las tablas innodb? –

+0

Como el manual solo menciona MyISAM y BDB, supongo que no. Consulte también http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html –

+0

¿Se puede hacer esto en una clave no primaria? – BenR

0

Puede lograr eso con desencadenar en insertar, establecer max (id) del grupo de tabla por group_field con group_fileld = @inserted_group;