Seite 1 von 1
QSqlDatabase und autoincrement
Verfasst: 26. Februar 2005 18:33
von Hans
Hallo,
ich greife mittels QSqlDatabase auf eine (MySql) Datenbank zu, in der einige Tabellen einen Autoincrement Wert haben. Ich würde nun gerne den Autoincrementwert eines INSERT zurückbekommen.
Über das MySql C Interface währe das die Funktion mysql_insert_id(). Die entsprechende QT Funktion hat sich bisher erfolgreich vor mir versteckt.
Gruß,
Hans
Verfasst: 27. Februar 2005 16:45
von FlorianBecker
Die Lösung ist:
Es gibt keine.
Verfasst: 28. Februar 2005 14:17
von Hans
FlorianBecker hat geschrieben:Es gibt keine.
Schade. Keine ist etwas sehr wenig. Gibt es Erfahrungswerte, wie zuverlässig die SQL Funktion LAST_INSERT_ID() unter Last ist?
Kann ich den gerade erstellten Datensatz über andere Wege bekommen, evtl. über Cursor? Da ließe sich die uid ja dann auch auslesen.
Verfasst: 28. Februar 2005 14:23
von FlorianBecker
Also da bei meinen Datensätzen das meiste mit timestamp hinterlegt ist nehm ich den mit ein oder zwei weiteren werten und mache einfach SELECT id WHERE timestamp=? AND wert2=? AND wert3=?
Die SQL Treiber von Qt sind meiner Meinung nach eh noch nicht so gut. Die 4er habe ich zwar noch nicht ausprobiert, aber wenn die genauso sind, werde ich wohl auf eine direkte Lösung umsteigen.
Verfasst: 28. Februar 2005 15:34
von nando
Hi,
soweit ich weiss ist dieser aufruf "lastinserted_id" .. fuer die aktuelle connection sicher.
schau auch mal nach "transistion level" in der doku.
zu beachten ist auch der tabellen typ... barkeydb oder myisam...
bezueglich transaktionen...
ansonsten kannst du auch mit mysql einen lock auf eine tabelle machen... dann den insert, dann die groesste id lesen und dann den lock wieder aufheben..
dieser lock ist dann verbindungsuebergreifend... also aufpassen...!!
mehr dazu auch unter transaktionen / transition level / lock
so hat es bei mir mit mysql gut funktioniert...
gruss,
nando
Verfasst: 28. Februar 2005 16:51
von Hans
Ah ja, hier stehts ja:
The last ID that was generated is maintained in the server on a per-connection basis. This means the value the function returns to a given client is the most recent AUTO_INCREMENT value generated by that client. The value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that you can retrieve your own ID without concern for the activity of other clients, and without the need for locks or transactions.
Ich war wieder zu blind um selbst zu lesen.
Danke,
Hans