Portál AbcLinuxu, 9. června 2025 12:18


Dotaz: mysql update

5.10.2010 17:29 Song
mysql update
Přečteno: 414×
Odpovědět | Admin

Ktory z nasledujucich sposobov je setrnejsi na zataz databazy ak by sa jednalo o dotazy ovplivnujuce nie len 3 riadky ako v priklade ale niekolko 100-1000 riadkov v tabulke .

$result = mysql_query("UPDATE `c1` SET `sklad`='neobjednatelne',`viditelnost`='ano',`cena`='19' WHERE `id` =6;") or die(mysql_error());

$result = mysql_query("UPDATE `c1` SET `sklad`='neobjednatelne',`viditelnost`='nie',`cena`='20' WHERE `id` =7;") or die(mysql_error());

$result = mysql_query("UPDATE `c1` SET `sklad`='neobjednatelne',`viditelnost`='ano',`cena`='21' WHERE `id` =8;") or die(mysql_error());

 

$result = mysql_query("

UPDATE `c1` SET `sklad` = CASE

WHEN `id`='6' THEN 'neobjednatelne'

WHEN `id`='7' THEN 'neobjednatelne'

WHEN `id`='8' THEN 'neobjednatelne' ,

`viditelnost` = CASE

WHEN `id`='6' THEN 'ano'

WHEN `id`='7' THEN 'nie'

WHEN `id`='8' THEN 'ano' ,

`cena` = CASE

WHEN `id`='6' THEN '19'

WHEN `id`='7' THEN '20'

WHEN `id`='8' THEN '21'

WHERE `id`='6' OR `id`='7' OR `id`='8';") or die(mysql_error());

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.10.2010 17:41 Sten
Rozbalit Rozbalit vše Re: mysql update
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud používáte transakce, tak ten první je vhodnější, u toho druhého bude stát velký výpočetní výkon ten dotaz vůbec zkompilovat a změny nakonec provede stejné.

Pokud transakce nepoužíváte, tak ten první dělá něco jiného než ten druhý!
5.10.2010 18:19 Song
Rozbalit Rozbalit vše Re: mysql update

Transakce?

Ja len, sice je ten druhy dotaz komplikovany, ale zas to vykona v jednom mysql_query,

pricom prvy sposob tych mysql_query uroby x-krat viac. Ale neak hlbsie do toho nevidim,

aby som vedel zhodnotit co je lepsie.

6.10.2010 15:31 vlasta | skóre: 10 | Brno
Rozbalit Rozbalit vše Re: mysql update
No ja bych se primlouval k tomu prvnimu, protoze tam bude naprosto jasne, co to ma udelat i 14 dni po te, co ten kod nadatlis a hlavne se v tom lepe budou hledat pripadne nesrovnalosti. Nejlepsi by bylo si udelat prepared statement a pak ho protocit s tema datama. Usetris db testovani tech milionu CASEu u kazdeho zaznamu a nebudes si rvat vlasi pri tvorbe algoritmu na vygenerovani toho silenyho updatu. Hlavne bys mohl taky narazit na to, ze te db posle k sipku, protoze je to na parsovani moc velky, napr. pri pouziti klauzule IN misto tech ORu na limit velikosti vyctu urcite narazis uz pri par tisicich polozkach.
6.10.2010 16:53 Sten
Rozbalit Rozbalit vše Re: mysql update
Pokud nevíte, co transakce jsou, tak je nepoužíváte :-)

Bez transakcí ten první způsob, pokud selže nějaká query, tak předchozí query změní část databáze, zatímco ten druhý způsob je vždy buď vše anebo nic. Proto ty způsoby nejsou totožné. (A proto bych vám doporučil transakce začít používat.)

Kolik těch query se provede, je MySQL celkem jedno, pokud tam nemáte InnoDB tabulky a neměníte primární klíče, tak to nemá moc vliv, parsovat tu šílenost s CASE stojí hodně času a běh je potom dost pomalý. Nehledě na to, že brzy narazíte na limity.

Nejrychlejší jsou prepared statements (tipuji, že používáte PHP, tam je to ještě jednodušší), kam jenom doplňujete data, protože to MySQL rozparsuje jenom jednou a bude to jednoduchý dotaz. Také to pro vás bude nejpřehlednější.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.