Anmelden

View Full Version : Autoincrement und Constraints



roko
18-07-19, 16:40
Hallo Leute,
Ich habe festgestellt, dass bei einem Insert auf eine Tabelle mit Autoincrement zuerst der Primary-Key generiert wird und dann die Constraints geprüft werden dh. falls ein Constraint das Hinzufügen verhindert so geht ein Primary-Key 'verloren'. Kann man der Datenbank ev. beibringen, dass die Generierung von Primary-Key erst zum Schluß erfolgt? Oder gibt es ev. andere Methoden um das 'verbrennen' von Primary-Keys zu verhindern?
Vielen Dank im Voraus
mfg Roman

Fuerchau
18-07-19, 17:24
Leider nein, da Primary Key die höchste und somit erste Bedingung ist.
Durch den Insert müssen ja erst alle Feldinhalte gefüllt werden, bevor ggf. weitere Constraints überhaupt geprüft werden können, auch wenn die Identity-Spalte für einen Ref-Constraint oder Unique-Contraint gar nicht benötigt wird. Die eigentliche Prüfung findet dann eben erst beim tatsächlichen Insert statt.

Aber eine Lückenlosigkeit kannst du da sowieso nicht garantieren, da bei korrekter Transaktionssteuererung durch einen Rollback aus anderen Gründen die Nummer sowieso weg ist.
Du musst berücksichtigen, dass ein Insert ja durchaus parallel von mehreren Sitzungen erfolgen kann.

Willst du eine lückenlose Nummerierung, musst du nach alter klassischer Sitte eine Nummernvergabe-Tabelle verwenden, die eben bis zum Commit/Rollback durch Lock's keine weitere Nummereierung mehr zulässt.