Portál AbcLinuxu, 4. prosince 2025 02:03
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());
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.
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ší.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.