sql insert

Honza Pazdziora adelton na fi.muni.cz
Sobota Prosinec 14 17:56:35 MET 2002


On Thu, Dec 12, 2002 at 10:31:27PM +0100, rootmj wrote:
> Chtel bych aby prechod z nynejsi SQLite na napr MySQL byl bezproblemovy.
> V idealnim pripade jen zamena v DBI->connect. Zajimalo by me jak mam 
> postupovat v pripade ze chci vlozit novy radek do tabylky a zjistit 
> cislo primarniho klice tohoto noveho radku. Nyni to delam pomoci.
> 
> $new_row_id = $dat->func('last_insert_rowid');

Tohle prenositelne neudelate, pokud tedy nebudete chtit pouzit nejaky
DBIx::* modul, ktery se snazi vytvorit jakousi priblizne kompatibilni
vrstvu. Smiril bych se s tim, ze zrovna tyhle veci holt bude potreba
pri zmene databaze osetrit.

> Coz je mozne v SQLite v pripade ze je primarni klic definovan takhle
>  id_fak       INTEGER       AUTO_INCREMENT PRIMARY KEY
> 
> Kompatibilni moznost me napada jen jedna
>  # $new_row_id = SELECT MAX(id_fak) FROM faktury
> a pote insert
>  # INSERT INTO faktury (id_fak,cis_fak,id_odb) VALUES ($new_row_id,?,?)
> 
> Coz je ale slozitejsi a pomalejsi ale snad kompatibilni.

Mozna to splnuje tyhle pozadavky, ale rozhodne to neni korektni.
Jednak tam asi chcete $new_row_id++, ale hlavne -- co kdyz mezitim
nekdo jiny (jina transakce, paralelni uzivatel) provede to same?
Spadne Vam to. Prave od toho jsou v tech databazich a driverech veci
jako last_insert, ktere zarucuji, ze to budete delat spravne. Byt na
kazde databazi trosku jinak.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
      ... all of these signs saying sorry but we're closed ...
------------------------------------------------------------------------


Další informace o konferenci Perl