Heim >Datenbank >MySQL-Tutorial >Wie kann ich in MySQL sowohl eine Auto-Inkrement-Spalte als auch einen anderen Primärschlüssel verwenden?

Wie kann ich in MySQL sowohl eine Auto-Inkrement-Spalte als auch einen anderen Primärschlüssel verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 08:57:291018Durchsuche

How can I use both an auto-increment column and a different primary key in MySQL?

MySQL: Herausforderungen bei der automatischen Inkrementierung und der Koexistenz von Primärschlüsseln

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.

Fallstudie: Mitgliederverwaltungstabelle

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.

Fehler aufgetreten

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

Potenzielle Lösungen

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!

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