mysql @@identity vs sql-server last_insert_id()
Bin ich richtig in dem Verständnis, dass mysql LAST_INSERT_ID () - Funktion nicht zurückgesetzt zwischen einfügen versucht (wie @@identity nicht in sql-server)..., dass, wenn die unmittelbar vorhergehende insert-operation fehl, LAST_INSERT_ID() zurückgegeben wird pk von dem, was der pk an, dass die Verbindung die Letzte insert, um alle Tabelle mit einem auto-increment Primärschlüssel. Und wenn ich richtig bin in diesem, bedeutet das nicht, scheinen, gerade über die verzögerte Verhalten für diese Funktion, dass man kommen könnte? Gibt es keine mysql-Funktion, die verhält sich ähnlich wie sql-server @@identity? Wird NULL zurückgeben, wenn dem unmittelbar vor insert-Versuch schafft keine neuen aufnehmen? Alternativ, wie wird man mit Sicherheit wissen, die den primären Schlüssel der letzten insert-operation?
- gibt Ihnen die aktuellsten legen in JEDEM Bereich. Dies kann das Ergebnis von einem trigger, der nichts zu tun hat mit der insert-Anweisung, die Sie gerade lief. in SQL server, die Sie wollen in der Regel über die scope_identity () - Funktion.
- thx, gute Aufklärung +1
- Bitte beachten Sie, dass SQL Server @@identity und scope_identity(), wenn verwendet mit multiple-row-inserts auf einem server mit mehreren Prozessoren, können falsche Antworten! Mit der OPTION (MAXDOP 1) ist ein workaround.
Du musst angemeldet sein, um einen Kommentar abzugeben.
@@identity ist in der Regel falsch in sql server. Sie sollten mit
scope_identity()
in den meisten Fällen statt.In MySql last_insert_id (), sollte sicher zu benutzen, denn nur so können Sie diese Funktion aufrufen, nachdem Sie eine insert-Fehler ist, du hast schon richtig gefangen und machten für die insert-Fehler. Sonst würden Sie immer noch die Verarbeitung der Kommandos. In anderen Worten, last_insert_id() ist nicht das error-handling-Mechanismus.
Müssen Sie überprüfen, um zu sehen, ob der insert erfolgreich war zuerst. Wenn das einfügen erfolgreich war, dann verlassen Sie sich auf LAST_INSERT_ID().
edit: in php: