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