2009-03-24 2 views
7

Gibt es eine Möglichkeit mit MySQL (speziell 5.0) ein Auto_increment-Feld zu haben, dessen Wert auf einer Gruppierungsspalte basiert?auto_increment nach Gruppe

Beispiel:

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

Ich möchte nicht durch irgendwelche ‚verrückt‘ Methoden gehen müssen, dies achive, wird aber, falls nötig.

Antwort

14

Für MyISAM- und BDB-Tabellen können Sie ein auto_increment-Feld als sekundären Teil des Schlüssels haben, z.

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

    PRIMARY KEY(group_field, id) 
); 

Hier ist, was die manual sagt über dieses

In diesem Fall wird der erzeugte Wert für die AUTO_INCREMENT Spalte berechnet als MAX (auto_increment_column) + 1 WHERE prefix = given-Präfix . Dies ist nützlich , wenn Sie Daten in geordnete Gruppen legen möchten.

+0

funktioniert das auch mit innodb-tables? –

+0

Da das Handbuch nur MyISAM und BDB erwähnt, würde ich nicht raten. Siehe auch http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html –

+0

Kann dies auf einem nicht primären Schlüssel getan werden? – BenR

0

Sie können dies mit Trigger auf einfügen erreichen, max (ID) aus der Tabelle Gruppe von group_field mit group_fileld = @inserted_group;