Legen Sie in postgres SQL
Gibt es eine Möglichkeit zum einfügen eines neuen Datensatzes in eine Tabelle, die nicht über ein auto-increment-ID ohne speziell die Eingabe der ID. Ich will nur die ID lastId+1.
INSERT INTO lists VALUES (id,'KO','SPH', '5')
//neue id
- Du willst also das Verhalten zu sein, wie eine Sequenz ("auto-increment"), ohne Verwendung einer Sequenz. Warum nicht? Diese Dinge existieren, um Probleme zu lösen, die Sie sonst leicht in mit gleichzeitigen Einsätzen.
- Ich will einfach nur, um einen neuen Datensatz einzufügen, ohne änderung der DB-Struktur...
- Wenn dies ist ein außergewöhnlicher Fall in Ordnung... Wenn dies ist der normale modus operandi, sollte man vielleicht ändern die Struktur der Datenbank.
- Das db-design ist nicht von mir 🙂
- Dann haben Sie möglicherweise zu sprechen, um die person, es ist bis zu. 🙂
- Das ist verrückt, eine Sequenz kaum passt die definition von "Datenbank-Struktur"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht! IMMER! Denken Sie gar nicht daran, das zu tun!
Diese FALSCH Lösung scheint (nicht) für Sie zu arbeiten:
ABER, wenn jemand versuchen, Sie zu legen in der gleichen Zeit wie Sie, Sie beide bekommen dasselbe
id
, was zu einem ungültigen Ergebnis. Sollten Sie wirklich verwendensequence
oder mehr zuverlässigen Mechanismus (eine Hilfs-Tabelle ist üblich, wenn Sie nicht haben, können Löcher in der Sequenz, aber es hat einige Nachteile [sperrt]). Sie können sogarserial
Datentyp um es einfacher zu machen (es erstellt eine Sequenz unten):Wenn Sie wirklich, wirklich, wirklich, können Sie nicht erstellen Sie und verwenden Sie eine Sequenz, die Sie tun können, als die oben genannten, aber Sie wird die Ausnahme behandelt werden (vorausgesetzt, die
id
Feld PK-oder UK -, und mit einer read committed-Transaktion), so etwas wie die (in PL/pgSQL):Aber wieder, ich empfehle Ihnen, es zu vermeiden: eine Sequenz verwenden und glücklich sein... =D
Weiß ich auch, es ist ein Beispiel, aber die Verwendung von expliziten Spalten-Liste auf
INSERT INTO
- Klausel.max
zurückkehren würdeNULL
(undNULL+1
zurückNULL
), können Sie einfach Griff, leicht mitCOALESCE
ich werde aktualisieren, die Antwort zu tunVersuchen Sie dies:
Alternativ:
Wenn Sie wollen nicht geben Sie Ihre ID-Feld muss autoincrement.
Wenn du guid als id (die Reihenfolge), müssen Sie angeben, aber der Wert wird berechnet, indem DBMS
max()
Funktion.current
statt8.1
in der URL.