Heim > Datenbank > MySQL-Tutorial > Hauptteil

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

Patricia Arquette
Freigeben: 2024-11-03 08:57:29
Original
970 Leute haben es durchsucht

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
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage