e...@servicii.info.ro wrote:
>> Multumesc
>>
>> mysql_insertid e ok pt scenariul meu.
>>
>>     
> Sau, independent de API:
>
> 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
>
> http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html
Rant-uri de craciun  :

Ca chestie mysql_insertid() e wrapper peste SELECT LAST_INSERT_ID() ;). 
Si last_insert_id() e gandit cand faci lock la tables inainte, ca daca 
baza de date e accesata multihreded nu se stie ce ai acolo. Nu are 
scope_identity() ca sqlserver , sau RETURNING a lui postgres (much 
saner, imho). Oricum scope_identity se foloseste decat in proceduri 
stocate, dar poti pune de ex last_insert_id-urile din doua tabele in a 
treia. Sau ceva grav care in mysql nu poti fara lock tables si 
"programare secventiala" (adica s-o faci tu din program , nu din 
db/sql), bagi x row-uri intr-o tabela, si apoi in a doua tre sa creezi x 
inregistrari cu id-urile cu pricina. Stiu, la utilizare normala pare 
banal, adica de ce as avea nevoie de returning, dar cand ai 20 de 
item-uri intr-un cos, 50 de utilizatori simultani and shit, postgres te 
ajuta sa faci diferenta dintre 3 si 20 de secunde :). Oracle stie curval 
si nextval. Curval() e dependent de sesiune, deci e ok. Nextval insa ...


Deci daca ai stress pe baza de date LAST_INSERT_ID() poate da jule, 
invata lock tables pt ISAM sau proceduri stocate pt INNO (pe bune, is 
simple). Daca alegi lock tables vei fi injurat ca totul merge la relanti 
:). Daca folosesti proceduri stocate+inno vei fi injurat ca nu prea se 
porteaza pe noul server, mysql nefiing (re)cunoscut pt excelenta in 
compatibilitate intre versiuni. Nu ca se intamla asa de des. (Acu as 
zice si ceva de ala care injura adminii ca nu schimba versiunea de 
php/mysql/whatever de pe server cand li se cere, si adminu le spune sa 
traca mai intai pe inno/utf8 daca vor pe bune sa migreze un mysql, si 
nu, apt-get update sau yum upgrade sau whatever, oricat de ciudat ar 
suna, strica chestii).

Sau use a fucking sane ORM. De ex Propel sau Cake pt PHP. Si o sa 
descoperi si chestii mai misto de genul un CHAR(36) definit ca cheie 
primara devine automat UUID, si cct.write() intoarce un obiect ce 
contine id-ul, si a migra baza de date intre diverse servere nu mai cere 
stres de rescris aplicatia. (Hint: use transactional engine or whatever 
is called pus pe yes).

Ca side note rant, Python trateaza automat conexiunile mysql emuland 
cursoare. Desi cursor.insert_id() or whatever is called e la fel de 
retard ca in orce api de mysql, de la c la smalltalk. (redundant, i 
know, toate sunt bind-uri pe api-ul de c), in general e ceva mai 
bun/usor de folosit daca ai ceva mai complex decat insert si select 
intr-o singura tabela.





_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui