Heim >Datenbank >MySQL-Tutorial >Wie erreicht man eine automatische Inkrementierung in einem zusammengesetzten Schlüssel in MySQL?

Wie erreicht man eine automatische Inkrementierung in einem zusammengesetzten Schlüssel in MySQL?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 05:24:03256Durchsuche

How to Achieve Auto Increment in a Composite Key in MySQL?

Zusammengesetzten Schlüssel mit automatischer Inkrementierung in MySQL definieren: Eine Herausforderung

Das Erstellen eines zusammengesetzten Schlüssels mit einer automatisch inkrementierenden Spalte kann eine Herausforderung darstellen MySQL. Dies gilt insbesondere für InnoDB-Tabellen, die bestimmte Einschränkungen auferlegen.

Szenario und Fehler:

Beachten Sie das folgende Tabellenschema:

CREATE  TABLE `issue_log` (
`sr_no` INT NOT NULL AUTO_INCREMENT ,
  `app_id` INT NOT NULL ,
  `test_id` INT NOT NULL ,
  `issue_name` VARCHAR(255) NOT NULL ,
primary key (app_id, test_id,sr_no)
);

Ein Versuch, diese Abfrage auszuführen, kann zu folgendem Fehler führen:

ERROR 1075: Incorrect table definition; there can be only one auto column and it must be defined as a key

Ziel:

Das gewünschte Verhalten besteht darin, dass die Spalte „sr_no“ für eindeutige Kombinationen automatisch erhöht wird von app_id und test_id.

Einschränkungen und Lösungen:

InnoDB-Tabellen erlauben nur eine einzige Spalte mit automatischer Inkrementierung. Daher kann das gewünschte Verhalten nicht direkt durch die Schemadefinition erreicht werden.

Alternativen:

Eine Lösung zur Überwindung dieser Einschränkung besteht darin, einen Trigger oder eine Prozedur zum manuellen Inkrementieren zu verwenden die Spalte sr_no basierend auf den Kriterien. Beispielsweise kann der folgende Trigger verwendet werden:

DELIMITER $$

CREATE TRIGGER xxx BEFORE INSERT ON issue_log
FOR EACH ROW BEGIN
    SET NEW.sr_no = (
       SELECT IFNULL(MAX(sr_no), 0) + 1
       FROM issue_log
       WHERE app_id  = NEW.app_id
         AND test_id = NEW.test_id
    );
END $$

DELIMITER ;

Weitere Überlegungen:

  • Trigger und Prozeduren können den Overhead der Datenbank erhöhen.
  • Alternative Datenbank-Engines wie MyISAM unterstützen möglicherweise die automatische Inkrementierung über mehrere Spalten innerhalb eines zusammengesetzten Schlüssels.

Das obige ist der detaillierte Inhalt vonWie erreicht man eine automatische Inkrementierung in einem zusammengesetzten Schlüssel in MySQL?. 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