Databáze > Ostatní DB

SQLite Update a Delete z hľadiska teórie

(1/1)

miroB:
V SQLite majú príkazy UPDATE a DELETE dosť závažné obmedzenia.
Napríklad UPDATE, riadené pomocou JOIN nie je podporované:

--- Kód: MySQL ---UPDATE tbl1 SET tbl1.Pole1 =    ( SELECT Expression FROM tbl1 INNER JOIN Tbl2        ON Tbl1.XY=Tbl2.XY   )Preto som navrhol vlastné riešenie v tvare:

--- Kód: MySQL ---UPDATE dstTableName AS d SET ( Field1, Fied2, .. )VALUES (         SELECT a.Field1, a.Field2 ..         FROM    dstTableName AS d INNER|LEFT JOIN tblName a                        ON d.FieldXY=a.FieldZX        WHERE Condition -- Poznámka : tu môže byť napr. aj podmienka        ORDER BY FieldList asc|desc        )S tým mi pomohol Delfín:

--- Citace: Delfin  19-03-2018, 12:20:10 ---.. Kdyz jsi u vykonu, co zkusit low level (nemusel bys "vlacet" kurzor) ;)?
..

--- Konce citace ---
V uvedenom vlákne je aj princíp a príslušné kódy.

Teraz mám záujem využiť obdobnú konštrukciu pre DELETE.
Technicky to zvládam, ale keďže idem venovať určité úsilie do riešenia, chcem sa spýtať,
z hľadiska teórie, či si v takomto riešení nejdem podpíliť haluz pod zadnicou..

V oboch prípadoch sa využíva vodiace Query (SQL), čerpajúce údaje z tabuľky, ktorá je súčasne menená (UPDATE), alebo dokonca mazaná (DELETE).
To by pri databázach typu C/S nemusel byť problém.. Ale pri "jednoduchej" databáze, akou je SQLite je to tiež OK?
Vyššie spomínané a fungujúce UPDATE sa zdá byť v poriadku. Ale môže to byť ozaj stabilné riešenie?
Nie je podobná verzia DELETE ešte viac ohrozená?
Poznámka: Prosím neodkazujte na riešenia, ktoré existujú v SQLite a obchádzajú tento problém zložitejšími Subquery.
Skúšal som rôzne varianty z webu, na tabuľke so 6 mega riadkami.. Pre tak veľkú tabuľku, sú prakticky nepoužiteľné.
Jednoducho v reálnom čase nedobehnú. Vyššie uvedené riešenie je hotové za 15 sekúnd.

99464:

--- Citace: Miroslav Baláž  23-03-2018, 12:08:29 ---Ale môže to byť ozaj stabilné riešenie?

--- Konce citace ---

Ano. Dokud vse probehne uvnitr transakce.

miroB:
Dík. Tak idem aj do toho DELETE:)

Navigace

[0] Seznam témat

Přejít na plnou verzi