database – atomicke operace
- chaky
- Člen | 22
Prosim existuje s Nette Database nejaka moznost, jak vykonavat atomicke operace primo v SQL, nebo je potreba otevrit si na to uplne samostatne mysqli spojeni?
Napr:
INSERT INTO a (x, y, z) (SELECT x, y, z FROM b WHERE x > 10)
CREATE TEMPORARY TABLE a (SELECT x, y, z FROM b WHERE x > 10)
UPDATE a, b SET a.x = b.x WHERE a.y = b.y
Zkousel jsem na nektere podobne veci pouzit
$database->query($sql)->fetch(); ale to zpravidla vyvolalo General error.
Je mi jasne, ze takovy typ operaci lze rozlozit do nekolika SQL, ktere budou
propojeny php logikou, ale takove reseni mi uplne vzdy nevyhovuje, napr.
z duvodu nedostatecne atomizace, nebo z toho duvodu, ze se ta operace tyka
opravdu velkych datovych objemu.
Je tedy nejaka moznost jak si pres $database sahnout na nizsi uroven prace
s sql? Predem dekuji za odpoved.
- matopeto
- Člen | 395
$database->query()
len neviem ci na tom mozes volat
fetch()
atomicitu zaistis tak ako pise @CZechBoY pomocou transakcie bude to nieco take:
<?php
$database->beginTransaction();
try {
$database->query("...");
$database->query("...");
$database->query("...");
$database->commit();
} catch {
$database->rollBack();
}
?>
Editoval matopeto (4. 9. 2017 9:55)