Strona 1 z 1

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

: czw lis 10, 2005 11:14 pm
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

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

: pt lis 11, 2005 12:37 am
autor: mdx
ad.1 mysql_insert_id

edit: fakt przejęzyczenie ;)

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

: pt lis 11, 2005 12:01 pm
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".

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

: pt lis 11, 2005 1:02 pm
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?

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

: pt lis 11, 2005 2:35 pm
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.