mysql schreiben und auslesen gleichzeitig ?
nesto
- datenbank
Hallo Leute,
ich stehe vor einem Riesenproblem.
Ich möchte gern einen Datensatz mit INSERT schreiben und gleichzeitig ( also ohne einen erneuten SELECT Befehl ) die dabei erstellte AutoNummer auslesen. Habt Ihr eine Idee, wie ich das bewerkstelligen kann ?
lieben Dank schon im voraus !
lg, nest0
hi,
Ich möchte gern einen Datensatz mit INSERT schreiben und gleichzeitig ( also ohne einen erneuten SELECT Befehl ) die dabei erstellte AutoNummer auslesen. Habt Ihr eine Idee, wie ich das bewerkstelligen kann ?
LAST_INSERT_ID http://www.mysql.com/doc/de/Miscellaneous_functions.html
oder
http://www.php.net/manual/de/function.mysql-insert-id.php
gruss,
wahsaga
yo,
Ich möchte gern einen Datensatz mit INSERT schreiben und gleichzeitig ( also ohne einen erneuten SELECT Befehl ) die dabei erstellte AutoNummer auslesen. Habt Ihr eine Idee, wie ich das bewerkstelligen kann ?
das kommt drauf an, benutzt du php ? dort gibt es nämlich genau dafür eine funktion oder unter mysql LAST_INSERT_ID([ausdruck]). gleichzeitig lesen und schreiben geht wohl nicht.
Ilja
Hello,
Ich möchte gern einen Datensatz mit INSERT schreiben und gleichzeitig ( also ohne einen erneuten SELECT Befehl ) die dabei erstellte AutoNummer auslesen. Habt Ihr eine Idee, wie ich das bewerkstelligen kann ?
das kommt drauf an, benutzt du php ? dort gibt es nämlich genau dafür eine funktion oder unter mysql LAST_INSERT_ID([ausdruck]). gleichzeitig lesen und schreiben geht wohl nicht.
Die Funktion wird wohl ihrerseits auch ein Query (SELECT) an die Datenbank richten. Ggf. nicht über SQL sondern über den Blockbuffer des Request-Interfaces.
Außerdem kann die Funktion nur "kurze" AutoIncrements auslesen, also keine 8Byte-Schlüssel (Bigint).
Da das eine potentielle Fehlerquelle ist, würde ich mir selber eine Funktion schreiben, die das Select an die Connetction-ID absetzt.
Liebe Grüße aus http://www.braunschweig.de
Tom
yo,
Die Funktion wird wohl ihrerseits auch ein Query (SELECT) an die Datenbank richten. Ggf. nicht über SQL sondern über den Blockbuffer des Request-Interfaces.
so wie ich das sehe, muss man sie in eine SELECT Anweisung einbauen, um den Wert zu erhalten. insofern ruft sie keine SELECT Anweisung auf, sondern ist teil einer SELECT Anweisung.
Außerdem kann die Funktion nur "kurze" AutoIncrements auslesen, also keine 8Byte-Schlüssel (Bigint).
kann sein, ist mir nicht bekannt, ob es da eine einschränkung gibt. in den dokus habe ich es nicht gesehen oder übersehen. das läßt sich aber doch einfach umgehen, wenn es sich nicht um einen datentyp von bigint ist ?
Ilja
Hello,
Die Funktion wird wohl ihrerseits auch ein Query (SELECT) an die Datenbank richten. Ggf. nicht über SQL sondern über den Blockbuffer des Request-Interfaces.
so wie ich das sehe, muss man sie in eine SELECT Anweisung einbauen, um den Wert zu erhalten. insofern ruft sie keine SELECT Anweisung auf, sondern ist teil einer SELECT Anweisung.
Das betrifft aber nur die MySQL-Funktion LAST_INSERT_ID()
SELECT last_insert_id()
ermittelt diese und gibt sie in einem Resultset zurück.
Die PHP-Funktion mysql_insert_id() gibt die letzte neu erzeugte Autoincrement-ID direkt zurück, aber nur als INT.
Trotzdem benötigt die Funktion intern einen Request an die Datenbankmaschine.
Außerdem kann die Funktion nur "kurze" AutoIncrements auslesen, also keine 8Byte-Schlüssel (Bigint).
kann sein, ist mir nicht bekannt, ob es da eine einschränkung gibt. in den dokus habe ich es nicht gesehen oder übersehen. das läßt sich aber doch einfach umgehen, wenn es sich nicht um einen datentyp von bigint ist ?
Das Problem ist versteckt:
Man kann inzwischen schon länger Tabellen mit Schlüsseln im BIGINT-Format anlegen. Da wir ja uns ja noch alle gut an das Y2K-Problem erinnern können, wird das auch oft gemacht. Gerade in Tabellen mit sehr dynamischem Datenbestand hat man so länger Ruhe vor dem Overflow.
Wenn man aber BIGINT angelegt und dann ggf. eines Tages auch in Bereich eintritt, dann sollte man auch BIGINT lesen und nicht nur INT. Sonnst stimmen ab diesem Moment plötzlich die Referenzen nicht mehr. Und das wäre hässlich.
Ich habe noch nicht ausprobiert, ob PHP wenigstens einen Fehler auslöst, wenn der INT-Bereich zu Ende ist und ein Carry produziert.
Liebe Grüße aus http://www.braunschweig.de
Tom
Yo,
Das Problem ist versteckt:
yup, das glaube ich auch.
Ilja
Hello,
Yo,
Das Problem ist versteckt:
yup, das glaube ich auch.
Ilja
Na und? Hast DU es schon gefunden? Oder gehörst Du zu den "nach mir die Sintflut"-Programmierern?
Liebe Grüße aus http://www.braunschweig.de
Tom
hi,
Das Problem ist versteckt:
Na und? Hast DU es schon gefunden? Oder gehörst Du zu den "nach mir die Sintflut"-Programmierern?
stehen die in irgendeiner weise in verbindung mit den "hoffentlich die sintflut vor meiner deadline"-programmierern ...?
gruss,
wahsaga
Hallo Leute,
ich stehe vor einem Riesenproblem.
Ich möchte gern einen Datensatz mit INSERT schreiben und gleichzeitig ( also ohne einen erneuten SELECT Befehl ) die dabei erstellte AutoNummer auslesen. Habt Ihr eine Idee, wie ich das bewerkstelligen kann ?
lieben Dank schon im voraus !
lg, nest0
Hallo ihr,
vielen Dank für Eure Antworten. Gibt es eine Möglichkeit, das ganze in ASP zu benutzen ?
vielen Dank !
lg, nest0
hi,
Gibt es eine Möglichkeit, das ganze in ASP zu benutzen ?
was hast du denn an den aussagen, dass LAST_INSERT_ID() eine stinknormale mysql-funktion ist, nicht verstanden?
im manual ist doch sogar ein beispiel dazu.
eine simple query wirst du doch wohl in ASP an deine mysql-datenbank übergeben können, oder?
gruss,
wahsaga
oder mit anderen Worten folgenden SQL statement gleich nach einer einer insert oder update abschicken:
SELECT LAST_INSERT_ID();
asp hat sicherlich auch eine solche funktion wie php, einfach mal in den dokus suchen.
Ilja