Das Szenario umfasst eine MySQL-Tabelle, in der die ID-Spalte als automatisches Inkrementierungsfeld für visuelle Zwecke dient Bequemlichkeit, während die Memberid-Spalte als tatsächlicher eindeutiger Schlüssel fungiert. Der Versuch, die Tabelle mit PRIMARY KEY (memberid) zu definieren, führt jedoch zu einem Fehler (1075), der besagt, dass es nur eine Auto-Spalte geben kann und es sich um einen Schlüssel handeln muss.
Um das Problem zu beheben, ist es möglich, eine automatisch inkrementierende Spalte zu haben, die nicht der PRIMÄRSCHLÜSSEL ist, vorausgesetzt, dass ein Index (Schlüssel) darauf definiert ist. Hier ist die geänderte Tabellendefinition:
<code class="sql">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) # or: UNIQUE KEY (id) ) ENGINE = MYISAM;</code>
Durch Hinzufügen eines KEY- oder UNIQUE KEY-Index zur ID-Spalte bleibt die Funktion zur automatischen Inkrementierung erhalten, während die Member-ID-Spalte zum Primärschlüssel wird, was effiziente Abfragen basierend auf dem ermöglicht Memberid-Wert.
Die beste Wahl hängt von der relativen Bedeutung von Leistung und Speicherplatz ab. Wenn die Leistung von größter Bedeutung ist, bietet die Beibehaltung der automatisch inkrementierenden ID-Spalte und die Verwendung eines Index für die Mitglieds-ID ein Gleichgewicht:
Wenn jedoch der Speicherplatz ein erhebliches Problem darstellt, sollten Sie erwägen, die ID-Spalte vollständig zu entfernen und sich auf die Mitglieds-ID-Spalte sowohl als Primärschlüssel als auch als Auto zu verlassen -inkrementierendes Feld. Dieser Ansatz opfert etwas Leistung zugunsten einer verbesserten Raumnutzung. Letztendlich hängt die Wahl zwischen Leistung und Platz von den spezifischen Anforderungen der Anwendung ab.
Das obige ist der detaillierte Inhalt vonKönnen automatisch inkrementierte Spalten existieren, ohne der Primärschlüssel in MySQL zu sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!