Heim >Datenbank >MySQL-Tutorial >Wie erreicht man eine automatische Inkrementierung in einem zusammengesetzten Schlüssel 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:
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!