[ dj13 @ 25.10.2006. 14:19 ] @
Kako bi moga da se uradi insert u 3 tabele,stim da se novi Id iz prve tabele, upisuje i u druge dve (kao strani kljuc radi povezivanja). A da pri tome ne bude brljanja ako dodje do velikog broja inserta u isto vreme?
poz
[ misk0 @ 25.10.2006. 19:16 ] @
Bez neke komplikacije.
Uradis prvi insert, pokupis taj ID sa selectom i onda formiras sledecu SQL komandu sa tim IDom kao jednim od parametara.
[ dj13 @ 26.10.2006. 11:37 ] @
Citat:
misk0: Bez neke komplikacije.
Uradis prvi insert, pokupis taj ID sa selectom i onda formiras sledecu SQL komandu sa tim IDom kao jednim od parametara.

Moze nesto ovako:
INSERT INTO table1(id,col1,col2) VALUES (,var1,var2)
$zadnji_id=mysql_insert_id()
INSERT INTO table2(id,col1,col2) VALUES (,$zadnji_id,var2)
INSERT INTO table3(id,col1,col2) VALUES (,$zadnji_id,var2)?
[ shketuljko @ 01.11.2006. 10:36 ] @
Citat:
dj13: Kako bi moga da se uradi insert u 3 tabele,stim da se novi Id iz prve tabele, upisuje i u druge dve (kao strani kljuc radi povezivanja). A da pri tome ne bude brljanja ako dodje do velikog broja inserta u isto vreme?
poz


Ako dodje do velikog broja inserta onda koristi transakcije!
To je veoma mocno sredstvo!
Znaci
START TRANSACTION;
INSERT INTO table1(id,col1,col2) VALUES (,var1,var2)
$zadnji_id=mysql_insert_id()
INSERT INTO table2(id,col1,col2) VALUES (,$zadnji_id,var2)
INSERT INTO table3(id,col1,col2) VALUES (,$zadnji_id,var2)?
COMMIT;


I ukoliko ti ne prodje cijela transakcija onda se odradi rollback i to je to!
Znaci osiguran si da ce proci upiti!
[ slobytox @ 07.11.2006. 20:09 ] @
Transakcije se cine idealnim ali kakve probleme donose.
U uslovima kada je baza velika (>2GB) broj istovremenih konekcija recimo 20 i broj komandi 100 u sekundi u kojoj meri ce koriscenje transakcija usporiti rad mysql servera.

Dodatno kako mogu biti siguran da izmedju komandi:

INSERT INTO table1(id,col1,col2) VALUES (,var1,var2)

i

$zadnji_id=mysql_insert_id()

nece biti zavrsena insert komanda od nekog drugog usera pa umesto zeljenog ID-a da dobijem drugi ID

Interesuje me u kojoj meri transakcije usporavaju server kod velikih i opterecenih baza? Ima li neko ozbiljnije iskustvo u vezi sa tim?
Da li na opterecenje servera prilikom transakcije bitno utice velicina tabela koje su u igri i moze li neko da objasni sta se zapravo desava prilikom izvrsenja transakcije?

[Ovu poruku je menjao slobytox dana 07.11.2006. u 23:40 GMT+1]
[ dj13 @ 13.11.2006. 09:42 ] @
Citat:
slobytox:
Dodatno kako mogu biti siguran da izmedju komandi:

INSERT INTO table1(id,col1,col2) VALUES (,var1,var2)

i

$zadnji_id=mysql_insert_id()

nece biti zavrsena insert komanda od nekog drugog usera pa umesto zeljenog ID-a da dobijem drugi ID


To i mene interesuje.
Mada sam negde procitao da sa PHP mysql_insert_id() valjda ne moze doci do te gorespomenute zamene ID, dok np. ako se uzme MySQL komanda last_insert_id da je moguca zbrka.
To sam samo procitao i ne znam da li je tacno, ako neko moze da potvrdi sa sigurnoscu bilo bi lepo :).
poz
[ Dejan Topalovic @ 15.11.2006. 16:33 ] @
Nadam se da ce vam ovo pomoci:
"The value of mysql_insert_id() is affected only by statements issued within the current client connection. It is not affected by statements issued by other clients."
i
"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 statements because the value of that function is maintained in the server."