Strona główna
  LAST_INSERT_ID MySQL

kaniagostyn *UKS Kania Gostyń

migracja z Accessa do Mysql.  em@poczta.onet.pl wrote at Sonntag, 7. Oktober 2007 22:43:


                                           ... wpisać last
insert id i z pewnością znajdziesz wszystko czego trzeba.
last_insert_id jest funkcją w SQLu do wstawiania danego id do np.
innej tabeli i używasz jej w zapytaniu a nie VBA.


Funkcja LAST_INSER_ID działa poprawnie tylko w ramach danego
połączenia (connect) z serweren MySQL. To oznacza, że możesz
z niej korzystać wyłącznie w codzie VBA używając jawnie objektu
ADODB.Connection (choć i tego nie jestem pewien). W przypadku
tabel połączonych, access używa (może użyć) więcej niż jednego
connect'u z serwerem MySQL, a tym samym nie możesz być pewien,
że kwerenda "SELECT LAST_INSERT_ID() ..." będzie wykonana
w tym samym kontekście co "INSERT ...".


MySQL NEW ID - jak pobrać?.


On 2008-05-21, mwgomez <informatykWYTNI@element.com.plwrote:
| W innych bazach danych są genaratory gdzie można pobrac następną wartośc
| np.
| przez NEWID().
W MySQL nie ma.
Jedyne, co jest trochę podobne, to funkcja UUID().


w mysql mozna uzyskac last insert id wiec jeszcze da rade zrobic dokument
master detail bez niespodzianek


MySQL NEW ID - jak pobrać?. | nie w kazdej bazie, no i pytanie co bedzie jak ci zerwie polaczenie po

| utworzeniu naglowka,

Dlatego takie rzeczy robi się w transakcjach.


no dobra, sprawdzilem, myslalem ze ta id jest nadawana na podstawie tego co
jest w tabelach, a sprawdzilem teraz i okazalo sie ze chodzi jak generator w
firebird czy sekwencja w postgresql, niezalezeni od tego czy transakcja sie
skonczyla czy nie, wartosc sie zmeinia na stale.

| lastinsert nie zadziala, bo w danej (nowej ) sesji nie zwiekszono
| licznika

A jak coś takiego może mieć miejsce?!


no jak to jak, last insert to ostatania wartosc typu increment dodana w
danej sesji.  Dosc logicznym ze po wznowieniu polaczenia
(setrownik odbc od mysql wznawia juz z innym id) last insert bedzie wynosic
0;

P.


last insert id. jh pisze:

| troche sie pogubilem, to co napisales : "select
| gen_id(NAZWA_GENERATORA,1)" pobierze Ci kolejna wartosc, tak ?

select gen_id(GEN_MAINDATA_ID,1) from RDB$DATABASE;

To zapytanie zwraca wartość generatora inkrementowanego o 1, czyli taką
wartość, jaka zostanie użyta przy insert, jeżeli pole np. ID ma tę
wartość pobierać, kiedy jej nie podałeś.

| Czy nie ma czegos takiego jak LAST_INSERT_ID w mysql ?

Jeśli dwóch użytkowników yuż po sobie wstawi coś do tabeli, a Ty
będziesz tym pierwszym, to którą wartość zwróci Ci last_insert_id? Pytam
serio, bo mam mało do czynienia z MySQL. Moja propozycja zwróci Ci
wartość generatora i na pewno nikt więcej tej wartości niedostanie,
nawet kiedy zrobisz rollback, bo generator jest poza transakcją.

Jacek

w mysql jest tak

"For LAST_INSERT_ID(), the most recently generated ID is maintained in
the server on a per-connection basis.

It is not changed by another client. It is not even changed if you
update another AUTO_INCREMENT  column with a non-magic value (that is, a
value that is not NULL and not 0). Using LAST_INSERT_ID() and
AUTO_INCREMENT columns simultaneously from multiple clients is perfectly
valid.

Each client will receive the last inserted ID for the last statement
that client executed."


last insert id. Gaf pisze:

jh pisze:
| | | troche sie pogubilem, to co napisales : "select
| gen_id(NAZWA_GENERATORA,1)" pobierze Ci kolejna wartosc, tak ?

| select gen_id(GEN_MAINDATA_ID,1) from RDB$DATABASE;

| To zapytanie zwraca wartość generatora inkrementowanego o 1, czyli
| taką wartość, jaka zostanie użyta przy insert, jeżeli pole np. ID ma
| tę wartość pobierać, kiedy jej nie podałeś.

| Czy nie ma czegos takiego jak LAST_INSERT_ID w mysql ?

| Jeśli dwóch użytkowników yuż po sobie wstawi coś do tabeli, a Ty
| będziesz tym pierwszym, to którą wartość zwróci Ci last_insert_id?
| Pytam serio, bo mam mało do czynienia z MySQL. Moja propozycja zwróci
| Ci wartość generatora i na pewno nikt więcej tej wartości niedostanie,
| nawet kiedy zrobisz rollback, bo generator jest poza transakcją.

| Jacek

w mysql jest tak

"For LAST_INSERT_ID(), the most recently generated ID is maintained in
the server on a per-connection basis.

It is not changed by another client. It is not even changed if you
update another AUTO_INCREMENT  column with a non-magic value (that is, a
value that is not NULL and not 0). Using LAST_INSERT_ID() and
AUTO_INCREMENT columns simultaneously from multiple clients is perfectly
valid.

Each client will receive the last inserted ID for the last statement
that client executed."

czyli mam pewnosc ze id ktore otrzymam w ten sposob
jest ostatnim id wygenerowanym przeze mnie i nikt inny nie bedzie mial
wplywu na jego wartosc


czy zadziala.


witam,

srodowisko: apache+php+mysql,

w tabeli sa 3 kolumy i pierwsza z nich jest autoincrement.
dodaje nowy wiersz:
INSERT INTO `tabela` (`kol2`,`kol3`) VALUES ('wartosc1', 'wartosc2');
[...]
mam watpliwosc czy baza zdazy dodac ten nowy wiersz nim PHP zacznie go
szukac.
czy PHP czeka na baze nim wykona nastepna instrukcje?


Nie mialby Pan watpliwosci gdyby poczytal
manula do MySQL.
O to co Pan pyta jest tam dokladnie opisane................

pozdrawiam
Adams
PS.  Last Insert Id


czy zadziala.
| | witam,

| srodowisko: apache+php+mysql,

| w tabeli sa 3 kolumy i pierwsza z nich jest autoincrement.
| dodaje nowy wiersz:
| INSERT INTO `tabela` (`kol2`,`kol3`) VALUES ('wartosc1', 'wartosc2');
[...]
| mam watpliwosc czy baza zdazy dodac ten nowy wiersz nim PHP zacznie go
szukac.
| czy PHP czeka na baze nim wykona nastepna instrukcje?

Nie mialby Pan watpliwosci gdyby poczytal
manula do MySQL.
O to co Pan pyta jest tam dokladnie opisane................

pozdrawiam
Adams
PS.  Last Insert Id


dzieki za namiary. mam manual po angielsku. czy dobrze rozumiem, ze uzycie
LAST_INSERT_ID jest bezpieczne nawet jesli z bazy korzysta naraz kilkuset
userow i kazdy moze sobie wstawic wiersz do bazy?

wyciag z manuala:

Also note that the value of the SQL LAST_INSERT_ID() function always contains
the most recently generated AUTO_INCREMENT value, and is not reset between
queries because the value of that function is maintained in the server.

The most recently generated ID is maintained in the server on a per-connection
basis. It will not be changed by another client. It will not even be changed if
you update another AUTO_INCREMENT column with a non-magic value (that is, a
value that is not NULL and not 0).


insert w php.


dany wrote:
Witam wszystkich.

Robie w skrypcie w php insert do bazy MySql do tabeli w ktorej jest
zdefiniowany klucz glowny (autoincrement). chcialbym otrzymac nr ID nadany
automatycznie temu rekordowi. (chce pozniej do innej tabeli wstawic
rekordy "podrzedne" i musze miec ID mastera )

Jak najlepiej to zrobic ?

Dany.


To z manuala do PHP :) :

Example 1. mysql_insert_id() example

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
     die('Could not connect: ' . mysql_error());

}


mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d ", mysql_insert_id());
?

Chyba o to chodziło, warto czasem zajrzeć do pomocy, to naprawdę nie
boli:)


last inser id i polaczenie z baza danych mysql. witam,

mam nastepujaca watpliwosc, co do ktorej chcialabym sie upewnic.

czy jesli uzywam  last_insert_id() do pobrania ostatniego rekordu
wprowadzonego do tabeli w bazie MySQL, to czy fakt wykonania mojego
skryptu na serwerze prze kilku userow  nie wprowadzi jakiegos
zamieszania,

bo teoretycznie nawiazujac polaczenie z baza danych , moje polaczenie
ma okreslne id.
czyli last_insert_id poowinno pobierac ostanie id dla danego polczenie,

czy dobrze mysle?

to jest bardzo wazne, bo najpierw robie insert, potem chce pobrac id
wprowadzonego rekordu i to id doac do kolejnego inserta.

acha, uzywam zwyklego mysql_connect, a nie stalego polaczenia. czy to
moze miec wplyw?

z gory dzieki za odpowiedz.

pozdrawiam

mh


Następny autoindex. Użytkownik Maciej <mac@szczecin.home.plw wiadomości do grup
dyskusyjnych napisał:a4t965$t@news.tpi.pl...


Witam serdecznie.

Chcialbym pobrac z bazy danych MYSQL informacje o kolejnym numerze auto
increment, ktory zostanie przyznany. Szukalem w helpie ale nie znalazlem o
tym informacji. Prosze o pomoc.


zacznij szukac w manualu
mysql_insert_id() returns the ID generated for an AUTO_INCREMENT column by
the previous INSERT query using the given link_identifier. If
link_identifier isn't specified, the last opened link is assumed.
pozdrowka


Jak wyciagnac klucz glowny nowo dodanego rekordu?.


Bogien wrote:
Czesc!

Powiedzmy ze mam tabele "news" z kluczem glownym na polu typu SERIAL
o nazwie "id". Wydaje polecenie INSERT. Chce sie teraz dowiedziec
(najlepiej bez wydawania nowych queries) jaka wartosc zostala wygenerowana
dla kolumny "id"... w MySQL-u sluzy do tego funkcja mysql_insert_id();
tutaj mam pg_getlastoid(), ktory jest chyba do czegos innego...?

Czyli chcialbym mniej-wiecej takie cos:
 $result = (INSERT INTO news (name, text) VALUES ('bla', 'blebleble'));
 $new_id = pg_funkcja_ktorej_szukam($result);

....zebym potem mogl zrobic...
 $result = (SELECT * FROM news WHERE id = $new_id);


to jest w dokumentacji postgresa:

After a sequence is created, you may use the function
nextval('seqname') to get a new number from the sequence. The
function currval('seqname') may be used to determine the number
returned by the last call to nextval('seqname') for the specified
sequence in the current session. The function setval('seqname',
newvalue) may be used to set the current value of the specified
sequence. The next call to nextval('seqname') will return the given
value plus the sequence increment.

czyli select * from nextval('seqname')


naprawde ostatni nr wpisu w bazie.


Jacek Czerwinski wrote:
| a mysql_insert_id podaje id ostatnio przeprowadzonej operacji
| insert.

Jak popełniam (drobne) fuchy w PHP, zawsze jej używam.


a używałeś tego może z persistent connection?

bo wg http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

"For LAST_INSERT_ID(), the most recently generated ID is maintained in
the server on a per-connection basis. It is not changed by another
client. It is not even changed if you update another AUTO_INCREMENT
column with a non-magic value (that is, a value that is not NULL and not
0). Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously
from multiple clients is perfectly valid. Each client will receive the
last inserted ID for the last statement that client executed."


pobieranie wart. auto_increment.


Problem dotyczy PHP i MySql: mam dwie tabele - klient i zamowienie.
Kluczem w tabeli klient jest Id_klient (auto_increment), pole to jest
jednoczesnie kluczem obcym w zamowieniu. Wstawiajac swoje dane do tabeli
klient baza automatycznie nadaje Id. Ale jak je pobrac zeby wpisac do
tabeli
zamowienie???

np:
$query = "INSERT INTO zamawiajacy (id_zamawiajacy, Imie, Nazwisko)
                 VALUES (NULL, '$Imie', '$Nazwisko')";

$querya = "INSERT INTO zamowienie (Id_zamowienie, Id_zamawiajacego,
Id_ksiazki)
                   VALUES ??????????


Get the id generated from the previous INSERT operation

int mysql_insert_id ([int link_identifier])

mysql_insert_id() returns the ID generated for an AUTO_INCREMENT column by
the previous INSERT query using the

given link_identifier. If link_identifier isn t specified, the last opened
link is assumed.

rash


Jak sprawdzić ostatni unikatowy nr ID w tabeli w SQL?.


On Wed, 2 Jul 2003 00:26:17 +0200, Rafał wrote:
Mam małe pytanie jak sprawdzić kolejny unikatowy nr ID, który tabela sama
przypisuje


w dokumentacji MySQLa znalazlem cos takiego. moze Ci to pomoze ?

http://www.mysql.com/doc/en/Getting_unique_ID.html

----
*9.1.12.3 How Can I Get the Unique ID for the Last Inserted Row?*

If you insert a record in a table containing a column that has the
AUTO_INCREMENT attribute, you can get the most recently generated ID by
calling the mysql_insert_id() function.

You can also retrieve the ID by using the LAST_INSERT_ID() function in a
query string that you pass to mysql_query().

You can check if an AUTO_INCREMENT index is used by executing the
following code. This also checks if the query was an INSERT with an
AUTO_INCREMENT index:

if (mysql_error(&mysql)[0] == 0 &&
    mysql_num_fields(result) == 0 &&
    mysql_insert_id(&mysql) != 0)
{
    used_id = mysql_insert_id(&mysql);

}


The most recently generated ID is maintained in the server on a
per-connection basis. It will not be changed by another client. It will
not even be changed if you update another AUTO_INCREMENT column with a
non-magic value (that is, a value that is not NULL and not 0).

If you want to use the ID that was generated for one table and insert it
into a second table, you can use SQL statements like this:

INSERT INTO foo (auto,text)
    VALUES(NULL,'text');              # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text');  # use ID in second table
----


migracja z Accessa do Mysql. On 7 Paź, 05:33, "Krzysztof Naworyta" <k.nawor@datacomp.com.pl
wrote:


Juzer Użytkownik <kruk.andr@gmail.comnapisał

| Próbuję przejść z z back-endu accessa na mysql i natknęłem się na
| problem, którego nie mogę obejść.
| Podczas korzystania z bazy Accessa używałem nastepującej konstrukcji
| do uzyskania ostatni nadanego id rekordu :
| rs.addnew
| last_id = rs.Fields(0)
|
| niestety po przesiadce na mysql-a to nie działa ( Fields(0) ma wartość
| Null) . Czy można uzyskać podczas zapisu rekordu jego automatycznie
| nadany id ?

prawie nic nie wiem o MySQL, ale z tego co wiem o różnych C-S, każdy z
nich oferuje jakąś funkcję do odpytania ostatniego autonumeru.

| Przeszukując Internet natknąłem się na funkcję last_insert_id() lecz
| wyskakuje mi błąd "Nie znana funkcja".

A w jakim kontekście próbujesz jej użyć ???

Korzystanie z pomysłu em_es'a z całą pewnością nie jest podejściem
właściwym.

--
KN
(MVP, M$ Office Access)


"Korzystanie z pomysłu em_es'a z całą pewnością nie jest podejściem
właściwym."
Kurcze (aż mi pociekło z oczka..) - może i nie właściwe, ale skuteczne
w moim przypadku. Przecież mówiłem że rzemieślnicze...
Ale szarpnąłem się i w kilka minut znalazłem właściwsze, książkowe (z
manuala) rozwiązanie.
Rozdział "18.1.6.1.1. Obtaining Auto-Increment Values" - z wersji 4.1
MySQLa.
http://dev.mysql.com/doc/refman/4.1/en/myodbc-usagenotes-functionalit...
Można na http://dev.mysql.com/doc/ wybrać wersję MySQL, wpisać last
insert id i z pewnością znajdziesz wszystko czego trzeba.
last_insert_id jest funkcją w SQLu do wstawiania danego id do np.
innej tabeli i używasz jej w zapytaniu a nie VBA. Ale jest tam też
sposób jak Selectem uzyskać ostatni id do uźycia w programie.

emes


  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • shirli.pev.pl


  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • arsenalpage.keep.pl
  •  Menu
     : kaniagostyn *UKS Kania Gostyń
     : last INSERT id MSSQL
     : lato but waw pl
     : Labradory waga wzrost
     : latarki Mag
     : łamacz haseł gg serwera
     : Labirynty do drukowania dla dzieci
     : latarka do ściągnięcia za darmo
     : lampa łukowa inaczej
     : Laurowiśnia krzak
     : Lark wgrywanie softu
     . : : .
    Copyright (c) 2008 kaniagostyn *UKS Kania Gostyń | Designed by Elegant WPT