In SQLite kann es wünschenswert sein, dass ein Nicht-Primärschlüsselfeld bei jedem Einfügen automatisch inkrementiert wird. Dadurch wird ein ähnliches Verhalten wie bei der automatischen Inkrementierung von Primärschlüsseln erreicht. Dies ermöglicht die Verwaltung sequentieller Werte innerhalb einer Tabelle.
Um dies zu erreichen, kann eine Problemumgehung implementiert werden, indem die Aggregatfunktion MAX() genutzt wird. Stellen Sie sich das folgende Szenario vor: eine Protokolltabelle mit einem Primärschlüssel (id) für den internen Gebrauch und einer Revisionsnummer (rev_no), die automatisch erhöht werden muss.
CREATE TABLE Log( id INTEGER PRIMARY KEY, rev_no INT );
Um einen neuen Protokolleintrag mit einem einzufügen Um die Revisionsnummer automatisch zu erhöhen, können wir die folgende SQL-Anweisung verwenden:
INSERT INTO Log (id, rev_no, description) VALUES ((SELECT MAX(id) + 1 FROM Log), 'rev_Id', 'some description');
Diese Anweisung berechnet zunächst den maximalen ID-Wert in der Protokolltabelle und addiert effektiv 1 dazu Generieren der nächsten verfügbaren Revisionsnummer. Der resultierende Wert wird dann als rev_no für den neuen Protokolleintrag verwendet.
Ein alternativer Ansatz kann zum Umgang mit leeren Tabellen verwendet werden:
INSERT INTO Log (id, rev_no, description) VALUES ((SELECT IFNULL(MAX(id), 0) + 1 FROM Log), 'rev_Id', 'some description');
Diese modifizierte Anweisung verwendet die Funktion IFNULL() um sicherzustellen, dass der maximale ID-Wert berechnet wird, auch wenn die Tabelle leer ist. Standardmäßig wird 0 zurückgegeben.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Nicht-Primärschlüsselfeld in SQLite automatisch erhöhen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!