Temporary tables (MySQL): verschil tussen versies
(Nieuwe pagina aangemaakt met '== Voorbeeld == De gebruikelijke manier om records binnen een tabel te kopiëren, is door gebruik van een ''tijdelijke tabel'': <pre> -- Maak een tijdelijke tabel...') |
|||
(Een tussenliggende versie door dezelfde gebruiker niet weergegeven) | |||
Regel 1: | Regel 1: | ||
− | == Voorbeeld == | + | Heel vaak heb ik tussentijdse resultaten binnen een langere berekening. ''Temporary tables'' kunnen daar geschikt voor zijn - Al staat me bij dat ze ook nadelen hebben. |
+ | |||
+ | == Voorbeeld: Records binnen een tabel kopiëren == | ||
De gebruikelijke manier om records binnen een tabel te kopiëren, is door gebruik van een ''tijdelijke tabel'': | De gebruikelijke manier om records binnen een tabel te kopiëren, is door gebruik van een ''tijdelijke tabel'': | ||
Regel 20: | Regel 22: | ||
DROP TABLE tbl_tmp; | DROP TABLE tbl_tmp; | ||
</pre> | </pre> | ||
+ | |||
+ | == Voorbeeld: ''update'' icm. ''group_concat'' == | ||
+ | |||
+ | Het lijkt erop, dat je niet zomaar ''update'' kunt gebruiken icm. ''group_concat''. Oplossing: Gebruik een tijdelijke tabel [https://stackoverflow.com/questions/6099870/mysql-update-with-a-join-and-a-group-concat]. Zie ook [[Update + group concat (MySQL)]] | ||
== Maar één keer openen per statement == | == Maar één keer openen per statement == | ||
Regel 28: | Regel 34: | ||
ERROR 1137: Can't reopen table: 'temp_table' | ERROR 1137: Can't reopen table: 'temp_table' | ||
− | + | Dit is een voorbeeld van een beperking van tijdelijke tabellen. Oplossingen: | |
+ | |||
+ | * Gebruik een niet-tijdelijke tabel (''persistente tabel''?) | ||
+ | * Gebruik twee tijdelijke tabellen - Wellicht is dat het meest overzichtelijk? | ||
+ | |||
+ | == Toepassing: In een applicatie-db! == | ||
+ | |||
+ | In mei 2019 een passende toepassing gevonden van tijdelijke tabellen: Om tussentijdse resultaten op te slaan in een WordPress-database: Die database wil ik zo min mogelijk aanpassen, dus een tijdelijke tabel is een prima oplossing. | ||
+ | |||
+ | == Zie ook == | ||
+ | |||
+ | * [[Update + group concat (MySQL)]] | ||
== Bronnen == | == Bronnen == |
Huidige versie van 28 mei 2019 om 16:33
Heel vaak heb ik tussentijdse resultaten binnen een langere berekening. Temporary tables kunnen daar geschikt voor zijn - Al staat me bij dat ze ook nadelen hebben.
Voorbeeld: Records binnen een tabel kopiëren
De gebruikelijke manier om records binnen een tabel te kopiëren, is door gebruik van een tijdelijke tabel:
-- Maak een tijdelijke tabel, en vul die met een subset van een andere tabel -- CREATE TEMPORARY TABLE tbl_tmp SELECT * FROM tbl_invoices WHERE id = 99; -- -- Pas de tijdelijke tabel aan -- UPDATE tbl_tmp SET id=100 WHERE id = 99; -- -- Voeg de tijdelijke tabel in, in de brontabel -- INSERT INTO tbl_invoices SELECT * FROM tbl_tmp WHERE id = 100; -- -- Tijdelijke tabel opdoeken -- DROP TABLE tbl_tmp;
Voorbeeld: update icm. group_concat
Het lijkt erop, dat je niet zomaar update kunt gebruiken icm. group_concat. Oplossing: Gebruik een tijdelijke tabel [1]. Zie ook Update + group concat (MySQL)
Maar één keer openen per statement
Je kunt in een query of stored procedure niet meer dan één keer refereren naar dezelfde tijdelijke tabel. Bv.:
mysql> SELECT * FROM temp_table, temp_table AS t2; ERROR 1137: Can't reopen table: 'temp_table'
Dit is een voorbeeld van een beperking van tijdelijke tabellen. Oplossingen:
- Gebruik een niet-tijdelijke tabel (persistente tabel?)
- Gebruik twee tijdelijke tabellen - Wellicht is dat het meest overzichtelijk?
Toepassing: In een applicatie-db!
In mei 2019 een passende toepassing gevonden van tijdelijke tabellen: Om tussentijdse resultaten op te slaan in een WordPress-database: Die database wil ik zo min mogelijk aanpassen, dus een tijdelijke tabel is een prima oplossing.