[SQL] Zwracanie ID i dane w dwóch tabelach

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
pbern
Nowy
Nowy
Posty: 63
Rejestracja: pn lis 24, 2003 10:30 pm

[SQL] Zwracanie ID i dane w dwóch tabelach

Post autor: pbern »

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
mdx
Nowy
Nowy
Posty: 84
Rejestracja: wt wrz 16, 2003 7:59 pm
Lokalizacja: Łuków
Kontakt:

Re: [SQL] Zwracanie ID i dane w dwóch tabelach

Post autor: mdx »

ad.1 mysql_insert_id

edit: fakt przejęzyczenie ;)
Ostatnio zmieniony pt lis 11, 2005 2:35 pm przez mdx, łącznie zmieniany 2 razy.
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

Re: [SQL] Zwracanie ID i dane w dwóch tabelach

Post autor: viraptor »

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".
pbern
Nowy
Nowy
Posty: 63
Rejestracja: pn lis 24, 2003 10:30 pm

Re: [SQL] Zwracanie ID i dane w dwóch tabelach

Post autor: pbern »

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".
czy moglbys w kilku zdanich strescic jaka jest roznica pomiedzy tymi formatami tabel?
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

Re: [SQL] Zwracanie ID i dane w dwóch tabelach

Post autor: viraptor »

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.
ODPOWIEDZ