database – atomicke operace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
chaky
Člen | 22
+
0
-

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.

CZechBoY
Člen | 3608
+
0
-

V transakci by to mohlo mit podobne chovani ktereho chces docilit.

matopeto
Člen | 395
+
0
-

$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)

chaky
Člen | 22
+
0
-

Aha, ja jsem byl presvedceny, ze tam ten fetch() plni podobnou funkci jako exec() – proto mi to nechodilo!

Bez nej uz je to v pohode.

Dekuji za radu.