Autor Téma: SQLite Update a Delete z hľadiska teórie  (Přečteno 1658 krát)

Offline miroB

  • Guru
  • *****
  • Příspěvků: 516
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
SQLite Update a Delete z hľadiska teórie
« kdy: 23-03-2018, 12:08:29 »
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 [Vybrat]
  1. UPDATE tbl1 SET tbl1.Pole1 =
  2.    ( SELECT Expression FROM tbl1 INNER JOIN Tbl2
  3.        ON Tbl1.XY=Tbl2.XY
  4.    )
Preto som navrhol vlastné riešenie v tvare:
Kód: MySQL [Vybrat]
  1. UPDATE dstTableName AS d SET ( Field1, Fied2, .. )
  2.         SELECT a.Field1, a.Field2 ..
  3.         FROM    dstTableName AS d INNER|LEFT JOIN tblName a
  4.                         ON d.FieldXY=a.FieldZX
  5.         WHERE Condition -- Poznámka : tu môže byť napr. aj podmienka
  6.         ORDER BY FieldList asc|desc
  7.         )
S tým mi pomohol Delfín:
.. Kdyz jsi u vykonu, co zkusit low level (nemusel bys "vlacet" kurzor) ;)?
..
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.


Offline miroB

  • Guru
  • *****
  • Příspěvků: 516
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:SQLite Update a Delete z hľadiska teórie
« Odpověď #1 kdy: 23-03-2018, 13:29:52 »
Dík. Tak idem aj do toho DELETE:)