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