MySQL: Erstellen einer von einem Fremdfeld abhängigen Sequenzspalte
Im Bereich der Datenbankverwaltung wird es manchmal zwingend erforderlich, vorhandene zu ändern Strukturen zur Anpassung an neue Datenanforderungen. Dies ist der Fall, wenn Datensätzen eine Sequenznummer basierend auf einem bestimmten Fremdschlüssel zugewiesen werden muss.
Stellen Sie sich eine Tabelle mit den Spalten ID, ACCOUNT und some_other_stuff vor. Das Ziel besteht darin, eine neue Spalte, SEQ, einzuführen, die für jeden einzelnen ACCOUNT-Wert eindeutig inkrementiert, etwa so:
ID ACCOUNT SEQ some_other_stuff 1 1 1 ... 2 1 2 ... 3 1 3 ... 4 2 1 ... 5 2 2 ... 6 1 4 ...
SQL-basierte Lösung:
MySQL stellt uns Trigger zur Verfügung, einen leistungsstarken Mechanismus zur automatischen Ausführung vordefinierter Aktionen bei Datenmanipulationsereignissen. In diesem Fall kann ein Trigger verwendet werden, um die SEQ-Spalte beim Einfügen des Datensatzes mit geeigneten Werten zu füllen. Der Triggercode:
CREATE TRIGGER trg_mytable_bi BEFORE INSERT ON mytable FOR EACH ROW BEGIN DECLARE nseq INT; SELECT COALESCE(MAX(seq), 0) + 1 INTO nseq FROM mytable WHERE account = NEW.account; SET NEW.seq = nseq; END;
Aufschlüsselung:
Das obige ist der detaillierte Inhalt vonWie implementiert man eine von einem Fremdschlüssel abhängige Sequenzspalte in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!