Witam,
Czy ktos moglby podac przyklad jak w prosty sposob dodajac rekord zmusic mysqla do zwrocenia jego ID (pole autoincrement).
Oraz czy istnieje jakis prosty sposob, aby za jednym razem dodac do bazy danych nowy rekord w jednej tabeli, po czym od razu dodac do innej tabeli dane ktore beda powiazane z poprzednia tabela via ID.
np w jednej tabeli dane dot. wlasciciela towaru, a w drugiej tabeli ID | ID_wlasciciela | towar |
z gory thx za pomoc
[SQL] Zwracanie ID i dane w dwóch tabelach
Re: [SQL] Zwracanie ID i dane w dwóch tabelach
Ostatnio zmieniony pt lis 11, 2005 2:35 pm przez mdx, łącznie zmieniany 2 razy.
Re: [SQL] Zwracanie ID i dane w dwóch tabelach
Na górze jest dobry link, ale chodziło oczywiście o mysql_insert_id.
A co do dodawania od razu w kilka tabel - prawdopodobnie chodzi ci o transakcje:
[sql]
SET AUTOCOMMIT=0; START TRANSACTION; INSERT INTO tabela_z_auto_inc VALUES (0, 'abc'); SELECT @ID:=LAST_INSERT_ID(); INSERT INTO inna_tabela VALUES (0, @ID, 'def'); COMMIT;
[/sql]
Ale do tego już nie wystarczą tabele MyISAM - musisz użyć InnoDB, albo BDB. Możesz ew. zrezygnować z transakcji i robić to tak samo, ale chyba miałeś powód "aby za jednym razem dodac".
A co do dodawania od razu w kilka tabel - prawdopodobnie chodzi ci o transakcje:
[sql]
SET AUTOCOMMIT=0; START TRANSACTION; INSERT INTO tabela_z_auto_inc VALUES (0, 'abc'); SELECT @ID:=LAST_INSERT_ID(); INSERT INTO inna_tabela VALUES (0, @ID, 'def'); COMMIT;
[/sql]
Ale do tego już nie wystarczą tabele MyISAM - musisz użyć InnoDB, albo BDB. Możesz ew. zrezygnować z transakcji i robić to tak samo, ale chyba miałeś powód "aby za jednym razem dodac".
Re: [SQL] Zwracanie ID i dane w dwóch tabelach
czy moglbys w kilku zdanich strescic jaka jest roznica pomiedzy tymi formatami tabel?viraptor pisze: Ale do tego już nie wystarczą tabele MyISAM - musisz użyć InnoDB, albo BDB. Możesz ew. zrezygnować z transakcji i robić to tak samo, ale chyba miałeś powód "aby za jednym razem dodac".
Re: [SQL] Zwracanie ID i dane w dwóch tabelach
http://dev.mysql.com/doc/refman/4.1/en/ ... gines.html
W skrócie - MyISAM nie obsługuje transakcji, a InnoDB i BDB obsługują.
Są jeszcze różnice w szybkości, ale to już zależy od konkretnego zastosowania.
Pisałeś, że chcesz wykonywać tamte inserty jednocześnie, więc pewnie właśnie transakcji potrzebujesz.
Tu masz coś więcej na ten temat: http://dev.mysql.com/doc/refman/4.1/en/commit.html
Ew. możesz użyć blokowania tabel: http://dev.mysql.com/doc/refman/4.1/en/lock-tables.html
To zadziała też w przypadku tabel MyISAM
Blokujesz tabele do zapisu / odczytu. Robisz swoje kilka insertów i z powrotem odblokowujesz dla normalnych operacji.
W skrócie - MyISAM nie obsługuje transakcji, a InnoDB i BDB obsługują.
Są jeszcze różnice w szybkości, ale to już zależy od konkretnego zastosowania.
Pisałeś, że chcesz wykonywać tamte inserty jednocześnie, więc pewnie właśnie transakcji potrzebujesz.
Tu masz coś więcej na ten temat: http://dev.mysql.com/doc/refman/4.1/en/commit.html
Ew. możesz użyć blokowania tabel: http://dev.mysql.com/doc/refman/4.1/en/lock-tables.html
To zadziała też w przypadku tabel MyISAM
Blokujesz tabele do zapisu / odczytu. Robisz swoje kilka insertów i z powrotem odblokowujesz dla normalnych operacji.

