![]() |
AW: SQL Automatisch zugeteilte Id ermitteln.
Zitat:
Zitat:
Wann ist der "richtige Moment"? Zitat:
![]() Bis jetzt hat hier noch keiner eine Situation beschrieben, in der die Zuverlässigkeit der Erzeugung einer Id nicht gewährleistet wäre. Ich lese immer nur Andeutungen und "von früher". Übrigens: Weder Hände noch andere Extremitäten sollte man ins Feuer legen, auch nicht, um irgend etwas zu beweisen. Ich bin nicht dafür haftbar zu machen, wenn irgend jemand eine Konstruktion zusammenbastelt, die irgendwelche fehlerhafte PK-Ids liefert oder anzeigt. Ich hatte damit wie bereits erähnt noch niemals auch nur das geringste Problem. Da gibt's im Zusammenhang mit Datenbank-Anwendungen ganz andere Dinge, die problematisch sein können. |
AW: SQL Automatisch zugeteilte Id ermitteln.
Das es bisher und jetzt funktioniert ist aber keine Garantie, dass es auch in der Zukunft so funktioniert. Deshaln würde ich den dokumentierten Weg über die vom DBMS bereitgestellten Funktionen gehen.
|
AW: SQL Automatisch zugeteilte Id ermitteln.
Abseits des eigentlichen MySql-Themas:
Zitat:
Auch der BeforeInsert-Trigger der Datenbank wirkt erst, nachdem der Datensatz per Post an den Server übergeben wurde. Es gibt allerdings Komponenten die den Wert solcher Spalten selbst vorab erzeugen. Dafür muss dann der für diese Spalte zuständigen Generator angegeben werden. Die Komponente erzeugt die neue ID über eine interne Abfrage und setzt dabei den Generator hoch:
Code:
Dann wirkt aber auch der Trigger nicht mehr, da die Spalte bereits belegt ist.
select GEN_ID(GEN_ZUSATZKLASSE_ID, 1) from RDB$DATABASE
Es ist dagegen fahrlässig, den Generator nur abzufragen ohne den Generatorwert hochzusetzen und sich darauf zu verlassen, dass der Trigger diese ID beim nächsten Post vergibt. Generatoren zählen für alle Transaktion und Datenbankverbindungen. Bis zum eigenen Post kann sich der Generatorwert schon wieder geändert haben und der Trigger vergibt eine andere ID. |
AW: SQL Automatisch zugeteilte Id ermitteln.
ich hab das problem letztens in postgres so gelöst:
transaction auf query ausführen "id des eingefügten records auslesen" query dahinter transaction zu damit kommt direkt die neue id als resultset zurück |
AW: SQL Automatisch zugeteilte Id ermitteln.
Zitat:
![]() Zitat:
|
AW: SQL Automatisch zugeteilte Id ermitteln.
Zitat:
Das kann nicht sein!:mrgreen: Gruß K-H |
AW: SQL Automatisch zugeteilte Id ermitteln.
Zitat:
This database also maintains a generator named EMP_NO_GEN and a Before Insert trigger named SET_EMP_NO on the EMPLOYEE table, to produce a value for this key whenever a new row is inserted. (Helen Borrie: The Firebird Book) Wenn die Aktion (insert) nicht abgeschlossen (post) wird (was einem cancel entspricht), setzt der Trigger den einmal erhöhten Generatorwert wieder zurück (rollback): Work performed by triggers will be rolled back if the transaction that prompted them is rolled back. (Helen Borrie: The Firebird Book) Zitat:
Zitat:
|
AW: SQL Automatisch zugeteilte Id ermitteln.
Zitat:
aber es gibt halt den weg - und ob der sicher ist, hängt von der implementation der transaktion ab (transaktionsisolation) begin; insert into test(name) values ('something'); select CURVAL('test_id_seq'); commit; und auch den weg (postgresql native) über "returning" INSERT INTO t2 (eid, ...) VALUES (...) RETURNING eid; ob es das bei anderen DBs gibt, weiß ich nicht |
AW: SQL Automatisch zugeteilte Id ermitteln.
Zitat:
Zitat:
![]() |
AW: SQL Automatisch zugeteilte Id ermitteln.
@supermuckl
Eine Funktion "CURVAL" dürfte es nicht durchgehend auf allen DBMS geben. Allerdings hatte ich Deinen ersten Beitrag dazu eher so verstanden:
Code:
Der Schlüssel muss dann natürlich eindeutig sein.
INSERT INTO table(f1, f2) VALUES(<Schlüsselwert>, 'Blabla');
SELECT <autoincrementfield> FROM table WHERE f1=<Schlüsselwert> Das dürfte innerhalb einer Transaktion in jedem DBMS funktionieren, könnte bei manchen (je nach Konfiguration) aber zum Rollback führen, wenn zwei User "gleichzeitig" diese Transaktion durchführen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz