MySQL stellt eine Herausforderung dar, wenn versucht wird, sowohl eine automatisch inkrementierende Spalte als auch einen Primärschlüssel zu definieren, der dies nicht ist die Spalte „Auto-Inkrementierung“. Standardmäßig schreibt MySQL vor, dass es nur eine Spalte für die automatische Inkrementierung geben kann und diese als Primärschlüssel festgelegt werden muss. Dies kann zu Verwirrung führen, wenn Sie versuchen, die Tabellenleistung und die Datenabrufeffizienz zu optimieren.
Betrachten Sie das folgende Beispiel: eine Mitgliedertabelle mit der ID-Spalte, die als automatisch markiert ist. Inkrement zur einfacheren visuellen Überwachung, während die Member-ID-Spalte als Primärschlüssel für die Mitgliedsidentifizierung in Abfragen dient. Ziel ist es, die automatische Inkrementierungsfunktion beizubehalten und gleichzeitig die Member-ID als Primärschlüssel festzulegen.
Der Versuch, die Tabelle mit PRIMARY KEY (Member-ID) zu erstellen, führt zu folgendem Fehler:
1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
Trotz des Fehlers ist es möglich, sowohl eine Spalte mit automatischer Inkrementierung als auch einen anderen Primärschlüssel zu haben. Hier sind zwei praktikable Ansätze:
1. Indizieren Sie die Auto-Inkrement-Spalte
Erstellen Sie einen Index für die ID-Spalte, um einen effizienten Abruf basierend auf ID und Mitglieds-ID zu ermöglichen. Die geänderte Tabellendefinition würde so aussehen:
CREATE TABLE members ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `memberid` VARCHAR( 30 ) NOT NULL , `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `firstname` VARCHAR( 50 ) NULL , `lastname` VARCHAR( 50 ) NULL , PRIMARY KEY (`memberid`), KEY (`id`) ) ENGINE = MYISAM;
2. Auto-Inkrement-Spalte zum Teil des Primärschlüssels machen
Definieren Sie die Tabelle neu, um die ID-Spalte in die Primärschlüsselzusammensetzung einzubeziehen, sodass sowohl id als auch memberid die definierenden Faktoren für die Identifizierung des Primärschlüssels sind. Die geänderte Definition lautet:
CREATE TABLE members ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `memberid` VARCHAR( 30 ) NOT NULL , `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `firstname` VARCHAR( 50 ) NULL , `lastname` VARCHAR( 50 ) NULL , PRIMARY KEY (`id`, `memberid`) ) ENGINE = MYISAM;
Durch die Implementierung eines dieser Ansätze können Sie die Notwendigkeit einer Spalte mit automatischer Inkrementierung für die visuelle Benutzerfreundlichkeit und die Verwendung eines benutzerdefinierten Schlüssels (Mitglieds-ID) für eine effiziente Mitgliedsidentifizierung in Einklang bringen Abfragen, ohne die Tabellenleistung zu beeinträchtigen.
Das obige ist der detaillierte Inhalt vonWie kann ich in MySQL sowohl eine Auto-Inkrement-Spalte als auch einen anderen Primärschlüssel verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!