Heim >Datenbank >MySQL-Tutorial >Können automatisch inkrementierte Spalten existieren, ohne der Primärschlüssel in MySQL zu sein?

Können automatisch inkrementierte Spalten existieren, ohne der Primärschlüssel in MySQL zu sein?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 01:20:02892Durchsuche

Can Auto-Increment Columns Exist Without Being the Primary Key in MySQL?

Behebung eines fehlerhaften Tabellendefinitionsfehlers: Ausgleich von automatischer Inkrementierung und Primärschlüssel

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.

Beheben des Fehlers: Auto-Inkrementierung beibehalten und eindeutiger Schlüssel

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.

Auswahl des optimalen Ansatzes: Ausbalancieren von Leistung und Speicherplatz

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:

  • Die automatisch inkrementierende ID sorgt für effiziente Sortierung und Bereichsabfragen.
  • Die Der Index für die Mitglieds-ID gewährleistet schnelle Suchvorgänge mithilfe der eindeutigen Mitgliedskennung.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn