Temporary tables (MySQL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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