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