Temporary tables (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
(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'
  
Dat is vaak een onthutsende beperking, met een hele eenvoudige oplossing: Gebruik een niet-tijdelijke tabel.
+
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.

Zie ook

Bronnen