Verwendung eines mehrspaltigen Primärschlüssels mit automatischer Inkrementierung und automatischer Inkrementierung in der Sekundärspalte
Die Aufrechterhaltung der Datenintegrität in Datenbanken mit gemeinsam genutzten Strukturen kann möglich sein entscheidend. Als Teil Ihrer Strategie erwägen Sie die Verwendung von zwei Spalten als gemeinsamen Primärschlüssel, von denen eine eine Datenbankkennung und die andere ein Tabellenschlüssel ist. Sie möchten jedoch festlegen, dass der Tabellenschlüssel basierend auf der Datenbankkennung automatisch inkrementiert wird.
Für MySQL stehen Ihnen je nach verwendeter Speicher-Engine Optionen zur Verfügung. Wenn Sie MyISAM verwenden, können Sie dessen Fähigkeit nutzen, AUTO_INCREMENT für eine sekundäre Spalte in einem mehrspaltigen Index anzugeben.
Um zu verstehen, wie dies funktioniert, betrachten Sie das folgende Beispiel:
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;
In dieser Tabelle bilden die Spalten grp und id den zusammengesetzten Primärschlüssel. Die ID-Spalte wird automatisch inkrementiert, ihre Wertberechnung berücksichtigt jedoch das Präfix (in diesem Fall den Grp-Wert).
Anwenden dieses Konzepts auf Ihr Szenario:
CREATE TABLE mytable ( table_id MEDIUMINT NOT NULL AUTO_INCREMENT, database_id MEDIUMINT NOT NULL, other_column CHAR(30) NOT NULL, PRIMARY KEY (database_id,table_id) ) ENGINE=MyISAM;
Beispieldaten einfügen :
INSERT INTO mytable (database_id, other_column) VALUES (1,'Foo'),(1,'Bar'),(2,'Baz'),(1,'Bam'),(2,'Zam'),(3,'Zoo');
Abfrage der Tabelle:
SELECT * FROM mytable ORDER BY database_id,table_id;
Dadurch werden Ergebnisse gruppiert zurückgegeben Datenbank_ID mit automatisch inkrementierten Tabellen-ID-Werten für jede Gruppe.
Das obige ist der detaillierte Inhalt vonWie implementiert man einen mehrspaltigen Auto-Inkrement-Primärschlüssel in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!