- 1 1. (Pro začátečníky) Co je dočasná tabulka MySQL? Rozdíly oproti běžným tabulkám
- 2 2. (S ukázkovým kódem) Jak vytvořit dočasnou tabulku v MySQL
- 3 3. Jak manipulovat s daty v MySQL dočasné tabulce (INSERT, UPDATE, DELETE)
- 4 4. Jsou dočasné tabulky MySQL automaticky odstraněny? Jak je odstranit ručně
- 5 5. 5 Praktických případů použití dočasných tabulek MySQL (včetně optimalizace výkonu)
- 6 6. Three Important Precautions When Using MySQL Temporary Tables Safely
- 7 7. 10 Často kladených otázek (FAQ) o dočasných tabulkách MySQL
- 8 8. Shrnutí: Klíčové body pro efektivní používání dočasných tabulek MySQL
1. (Pro začátečníky) Co je dočasná tabulka MySQL? Rozdíly oproti běžným tabulkám
Úvod
Při správě dat v MySQL se občas setkáte s potřebou uložit data jen dočasně. Například při zpracování velké datové sady můžete chtít během práce uložit mezivýsledky. V takových případech je dočasná tabulka (Temporary Table) velmi užitečná.
V tomto článku vysvětlíme základní principy dočasných tabulek MySQL a jak se liší od běžných tabulek.
1-1. Co je dočasná tabulka?
Dočasná tabulka je speciální tabulka, která existuje pouze během databázové relace (spojení).
Na rozdíl od běžné tabulky je automaticky odstraněna po ukončení relace, což ji činí ideální pro ukládání dočasných dat.
Hlavní vlastnosti dočasných tabulek
- Izolována podle relace Dočasná tabulka je přístupná pouze v rámci relace, která ji vytvořila. Ostatní relace ji nemohou odkazovat.
- Automaticky odstraněna po ukončení relace Dočasné tabulky zmizí automaticky po skončení relace, i když je explicitně neodstraníte.
- Můžete vytvořit dočasné tabulky se stejným názvem Na rozdíl od běžných tabulek je možné vytvořit dočasné tabulky se stejným názvem v různých relacích.
1-2. Rozdíly oproti běžným tabulkám
Dočasné tabulky a běžné tabulky se liší následujícím způsobem.
| Comparison | Temporary Table | Regular Table |
|---|---|---|
| Data retention | Valid only during the session (automatically removed) | Stored permanently |
| Access scope | Only within the session that created it | Accessible to all users (subject to privileges) |
| Name conflicts | You can create temporary tables with the same name | You cannot create another table with the same name in the same database |
| Required privileges | Requires the CREATE TEMPORARY TABLES privilege | Requires the standard CREATE TABLE privilege |
| Indexes | Supported | Supported |
| Performance | Often created in memory and can be fast | Stored on disk; performance can degrade as data grows |
Kterou byste měli použít?
- Pokud potřebujete data jen dočasně a můžete je po zpracování zahodit → Dočasná tabulka
- Pokud chcete data uchovat trvale a později je znovu použít → Běžná tabulka
Například dočasné tabulky jsou velmi užitečné pro úlohy jako rozsáhlá analýza dat nebo dočasná agregace.
1-3. Kdy potřebujete dočasnou tabulku
Dočasné tabulky MySQL jsou zvláště užitečné v následujících situacích.
1) Zlepšení výkonu dotazu
Například při provádění složitých operací JOIN můžete snížit dobu zpracování vytvořením dočasné tabulky, která předem uloží mezidata.
Příklad: Snížení režie JOIN
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';
Uložením cílových dat nejprve do dočasné tabulky a následným provedením JOIN se může výkon zlepšit.
2) Dočasné ukládání dat
Dočasné tabulky jsou také užitečné, když aplikace potřebuje data spravovat dočasně. Například můžete uložit data, která uživatel vyhledal, do dočasné tabulky a po ukončení relace je nechat odstranit.
3) Mezilehlé tabulky pro dávkové zpracování
Při zpracování velkého množství dat může použití dočasných tabulek jako mezilehlých tabulek zlepšit stabilitu procesu.
1-4. Omezení dočasných tabulek
Dočasné tabulky jsou pohodlné, ale mají několik omezení.
1) Automaticky odstraněny po ukončení relace
Protože jsou dočasné tabulky automaticky odstraněny po ukončení relace, nejsou vhodné pro trvalé ukládání dat.
2) Nepřístupné z jiných relací
Dočasné tabulky lze použít pouze v rámci relace, která je vytvořila, a proto je nelze sdílet s ostatními uživateli nebo procesy.
3) Potenciální konflikt s běžnou tabulkou se stejným názvem
Pokud existuje běžná tabulka se stejným názvem, vytvoření dočasné tabulky s tímto názvem způsobí, že běžná tabulka bude dočasně neviditelná, proto buďte opatrní.
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(255));
SELECT * FROM users; -- This query references the temporary table data
Jak je uvedeno výše, jakmile je vytvořena dočasná tabulka, nemůžete přistupovat k běžné tabulce se stejným názvem, dokud dočasná tabulka nezmizí. Volte názvy tabulek opatrně.
Shrnutí
Dočasné tabulky MySQL jsou pohodlnou funkcí pro dočasné ukládání dat a optimalizaci dotazů. Pokud pochopíte, jak se liší od běžných tabulek a budete je používat správně, můžete zpracovávat data efektivněji.
✔ Quick recap
- Dočasné tabulky jsou automaticky odstraněny po ukončení relace
- Na rozdíl od běžných tabulek jsou izolovány pro každou relaci
- Skvělé pro dočasné ukládání a zlepšení výkonu dotazů
- Nevhodné pro trvalé ukládání, protože data zmizí po ukončení relace
- Není k dispozici z jiných relací a může docházet ke konfliktu s běžnými tabulkami se stejným názvem
2. (S ukázkovým kódem) Jak vytvořit dočasnou tabulku v MySQL
Introduction
V předchozí sekci jsme vysvětlili základní koncept dočasných tabulek a jak se liší od běžných tabulek.
V této sekci si projdeme, jak vytvořit dočasnou tabulku a jak s daty v ní pracovat.
Vytvoření dočasné tabulky je jednoduché, ale pokud nepoužijete správnou syntaxi, nemusí se chovat podle očekávání. Tato sekce podrobně vysvětluje základní syntaxi, vytváření z existující tabulky a jak ověřit dočasné tabulky.
2-1. Basic Syntax for a Temporary Table
Pro vytvoření dočasné tabulky použijte příkaz CREATE TEMPORARY TABLE.
Basic syntax
CREATE TEMPORARY TABLE table_name (
column_name data_type [constraints],
column_name data_type [constraints],
...
);
Syntaxe je téměř stejná jako CREATE TABLE, ale přidání TEMPORARY ji učiní dočasnou tabulkou.
Example: Store user information in a temporary table
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Tato tabulka temp_users je platná pouze v aktuální relaci a je automaticky odstraněna po ukončení relace.
2-2. Create a Temporary Table Based on Data from an Existing Table
Můžete také vytvořit dočasnou tabulku na základě dat z existující tabulky.
Syntax
CREATE TEMPORARY TABLE temp_table_name AS
SELECT * FROM existing_table WHERE condition;
Example: Store only active users in a temporary table
CREATE TEMPORARY TABLE active_users AS
SELECT id, name, email FROM users WHERE status = 'active';
Tato metoda vyextrahuje pouze uživatele s status = 'active' z tabulky users a uloží je do nové dočasné tabulky s názvem active_users.
Key points
- Kopíruje data z existující tabulky tak, jak jsou
- Datové typy sloupců jsou nastaveny automaticky
- Indexy nejsou zkopírovány, takže je v případě potřeby přidejte explicitně
2-3. How to Check Temporary Table Data
List tables
SHOW TABLES;
Nicméně dočasná tabulka se v seznamu získaném pomocí běžného SHOW TABLES neobjeví.
Check the structure of a temporary table
DESC temp_users;
or
SHOW CREATE TABLE temp_users;
To vám umožní zkontrolovat strukturu sloupců a omezení dočasné tabulky.
2-4. Insert Data into a Temporary Table
Vkládání dat do dočasné tabulky je stejné jako u běžné tabulky.
Insert data
INSERT INTO temp_users (name, email) VALUES
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');
Check the data
SELECT * FROM temp_users;
Tím se potvrzuje, že data byla uložena v dočasné tabulce.
2-5. Notes When Creating Temporary Tables
1) Watch out for table name conflicts
Pokud vytvoříte dočasnou tabulku se stejným názvem jako běžná tabulka, dočasná tabulka má přednost a běžná tabulka se stane dočasně nedostupnou.
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
SELECT * FROM users; -- This returns data from the temporary table
Z tohoto důvodu se doporučuje používat předponu jako „temp_“ pro názvy dočasných tabulek.
2) Indexes are not inherited automatically
Když kopírujete data z existující tabulky, indexy se nepoužijí automaticky.
V případě potřeby je musíte přidat explicitně.
ALTER TABLE temp_users ADD INDEX (email);
3) Potřebujete oprávnění k vytvoření dočasných tabulek
To create a temporary table, you need the CREATE TEMPORARY TABLES privilege.
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user'@'localhost';
Without this privilege, you cannot create temporary tables.
Shrnutí
In this section, we explained how to create temporary tables.
✔ Rychlý přehled
- Vytvořte dočasnou tabulku pomocí
CREATE TEMPORARY TABLE - Můžete ji také vytvořit zkopírováním dat z existující tabulky
- Automaticky odstraněna, když se sezení ukončí
- Indexy se nepoužívají automaticky—buďte opatrní
- Použijte předponu jako „temp_“, abyste se vyhnuli konfliktům názvů
- Potřebujete příslušné oprávnění (
CREATE TEMPORARY TABLES)
3. Jak manipulovat s daty v MySQL dočasné tabulce (INSERT, UPDATE, DELETE)
Úvod
V předchozí sekci jsme vysvětlili, jak vytvořit dočasnou tabulku v MySQL.
V této sekci vysvětlíme, jak vkládat, aktualizovat a mazat data v dočasné tabulce pomocí konkrétních SQL příkazů.
Dočasné tabulky podporují stejné operace s daty jako běžné tabulky,
ale existují některé důležité poznámky, na které je třeba si dát pozor, a které také probereme.
3-1. Vkládání dat do dočasné tabulky (INSERT)
Pro přidání dat do dočasné tabulky použijte příkaz INSERT INTO, stejně jako u běžné tabulky.
Základní syntaxe
INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Příklad: Přidání informací o uživateli
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO temp_users (name, email)
VALUES
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');
Vložení existujících dat pomocí INSERT…SELECT
Můžete také načíst data z existující tabulky a vložit je do dočasné tabulky.
INSERT INTO temp_users (id, name, email)
SELECT id, name, email FROM users WHERE status = 'active';
This method lets you store only active users in a temporary table.
3-2. Aktualizace dat v dočasné tabulce (UPDATE)
Pro změnu dat v dočasné tabulce použijte příkaz UPDATE.
Základní syntaxe
UPDATE temp_table_name
SET column_name = value
WHERE condition;
Příklad: Aktualizace jména uživatele
UPDATE temp_users
SET name = 'Ichiro Tanaka'
WHERE email = 'tanaka@example.com';
Hromadná aktualizace řádků, které splňují podmínku
Například, pokud chcete změnit e‑mailové adresy pod konkrétní doménou na example.jp, můžete napsat:
UPDATE temp_users
SET email = REPLACE(email, 'example.com', 'example.jp')
WHERE email LIKE '%@example.com';
3-3. Mazání dat z dočasné tabulky (DELETE)
Pro smazání dat použijte příkaz DELETE.
Základní syntaxe
DELETE FROM temp_table_name WHERE condition;
Příklad: Smazání dat konkrétního uživatele
DELETE FROM temp_users WHERE email = 'tanaka@example.com';
Smazání všech řádků (rozdíl od TRUNCATE)
Pokud chcete smazat všechny řádky, můžete napsat:
DELETE FROM temp_users;
Naopak u běžných tabulek můžete často smazat všechny řádky rychleji pomocí TRUNCATE TABLE. Nicméně v MySQL nemůžete použít TRUNCATE na dočasnou tabulku.
TRUNCATE TABLE temp_users; -- Error (cannot be used on temporary tables in MySQL)
Proto pro odstranění všech řádků z dočasné tabulky musíte použít DELETE.
3-4. Poznámky při manipulaci s daty v dočasné tabulce
1) Data zmizí, když sezení skončí
Dočasná tabulka je automaticky odstraněna, když sezení (spojení) skončí,
proto není vhodná pro případy, které vyžadují trvalé ukládání dat.
2) Není přístupná z jiných sezení
Dočasná tabulka je platná pouze v rámci sezení, které ji vytvořilo, a nemůže být přístupná z jiných sezení.
SELECT * FROM temp_users;
Pokud spustíte tento SQL v jiné relaci, získáte chybu „Table ‚temp_users‘ doesn’t exist“.
3) Indexy na dočasných tabulkách nejsou aplikovány automaticky
Pokud vytvoříte tabulku pomocí CREATE TEMPORARY TABLE ... AS SELECT ...,
indexy z původní tabulky nejsou zděděny. V případě potřeby přidejte indexy ručně pomocí ALTER TABLE.
ALTER TABLE temp_users ADD INDEX (email);
Shrnutí
V této sekci jsme pokryli manipulaci s daty (INSERT, UPDATE, DELETE) pro dočasné tabulky.
✔ Rychlé shrnutí
- Použijte INSERT k přidání dat (
INSERT INTO ... VALUES/INSERT INTO ... SELECT) - Použijte UPDATE k úpravě dat (podmíněné aktualizace a využití
REPLACE()) - Použijte DELETE k odstranění dat (
DELETE FROM ... WHERE;TRUNCATEnení povoleno) - Dočasná tabulka je odstraněna, když relace končí
- Není přístupná z jiných relací
- Indexy nejsou automaticky zděděny; v případě potřeby je přidejte ručně
4. Jsou dočasné tabulky MySQL automaticky odstraněny? Jak je odstranit ručně
Úvod
Na rozdíl od běžných tabulek je dočasná tabulka MySQL (Temporary Table) automaticky odstraněna, když relace končí. Existují však situace, kdy můžete potřebovat ji odstranit ručně.
V této sekci podrobně vysvětlujeme jak funguje automatické odstraňování a jak ručně odstranit dočasné tabulky.
4-1. Jak funguje automatické odstraňování pro dočasné tabulky
1) Automaticky odstraněna, když relace končí
Dočasná tabulka MySQL je automaticky odstraněna, když relace (databázové připojení), která ji vytvořila, končí.
Kvůli tomu ji obvykle nemusíte odstraňovat ručně.
Příklad: Automatické odstraňování při konci relace
-- Create a temporary table in a new session
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
-- Insert data
INSERT INTO temp_users (name, email) VALUES ('Taro Tanaka', 'tanaka@example.com');
-- End the session (disconnect the MySQL client)
EXIT;
V tomto okamžiku je dočasná tabulka temp_users automaticky odstraněna.
2) Dočasná tabulka zůstává, dokud relace pokračuje
Protože dočasné tabulky jsou spravovány na úrovni relace, nejsou odstraněny, dokud je relace otevřená.
SELECT * FROM temp_users; -- Data can be retrieved if the session is still active
Jinými slovy, dočasná tabulka zůstává v paměti, dokud neukončíte MySQL klienta (nebo program neodpojí).
4-2. Jak ručně odstranit dočasnou tabulku
Dočasné tabulky můžete také odstranit ručně. V MySQL použijte DROP TEMPORARY TABLE k odstranění dočasné tabulky.
1) Použijte DROP TEMPORARY TABLE
DROP TEMPORARY TABLE temp_users;
Tím okamžitě odstraníte dočasnou tabulku temp_users.
2) Přidejte IF EXISTS pro vyhnutí se chybám
Pokud tabulka neexistuje, můžete použít IF EXISTS, abyste se vyhnuli chybě.
DROP TEMPORARY TABLE IF EXISTS temp_users;
Tato syntaxe zabraňuje chybám i v případě, že tabulka neexistuje.
3) Liší se od běžného DROP TABLE
Pokud se pokusíte odstranit dočasnou tabulku pomocí běžného DROP TABLE, můžete získat chybu jako následující:
DROP TABLE temp_users;
Error:
ERROR 1051 (42S02): Unknown table 'temp_users'
Protože MySQL spravuje běžné tabulky a dočasné tabulky odděleně, musíte při odstraňování dočasné tabulky použít DROP TEMPORARY TABLE.
4-3. Jak potvrdit, že byla dočasná tabulka odstraněna
1) Nemůžete potvrdit pomocí SHOW TABLES
Dočasná tabulka se neobjeví ve výstupu SHOW TABLES.
SHOW TABLES;
→ Dočasné tabulky nejsou vypsány
2) Potvrďte pomocí INFORMATION_SCHEMA
Můžete zkontrolovat, zda dočasná tabulka existuje, dotazem na INFORMATION_SCHEMA.
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'temp_users';
Pokud tento dotaz vrátí výsledek, naznačuje to, že dočasná tabulka existuje.
4-4. Poznámky při odstraňování dočasných tabulek
1) Dočasné tabulky se liší podle relace
Můžete vytvořit dočasné tabulky se stejným názvem v několika relacích.
Nemůžete odstranit dočasnou tabulku vytvořenou jinou relací.
Příklad
-- Created in session A
CREATE TEMPORARY TABLE temp_data (id INT);
-- Attempt to drop in session B
DROP TEMPORARY TABLE temp_data;
Vyskytla se chyba:
ERROR 1051 (42S02): Unknown table 'temp_data'
Dočasnou tabulku lze odstranit pouze v relaci, která ji vytvořila.
2) Potenciální konflikt s běžnou tabulkou se stejným názvem
Pokud má dočasná tabulka stejný název jako běžná tabulka,
dočasná tabulka má přednost a běžná tabulka se stane neviditelnou.
Příklad
-- A regular table (users) exists
SELECT * FROM users;
-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
-- This now references the temporary table users
SELECT * FROM users;
Řešení:
- Použijte předponu jako
temp_pro dočasné tabulky, abyste se vyhnuli konfliktům v názvech.
Shrnutí
V této sekci jsme vysvětlili, jak funguje odstraňování dočasných tabulek a jak je odstranit.
✔ Rychlé shrnutí
- Dočasné tabulky jsou automaticky odstraněny při ukončení relace
- Zůstávají, dokud je relace aktivní
- Pro ruční odstranění použijte
DROP TEMPORARY TABLE - Přidejte
IF EXISTS, aby se předešlo chybám - Nemůžete potvrdit existenci dočasných tabulek pomocí
SHOW TABLES - Dočasnou tabulku můžete odstranit pouze v relaci, která ji vytvořila
- Použijte předponu, abyste se vyhnuli konfliktům s běžnými tabulkami se stejným názvem
5. 5 Praktických případů použití dočasných tabulek MySQL (včetně optimalizace výkonu)
Úvod
Dočasné tabulky MySQL vám umožňují ukládat mezilehlá data a zjednodušovat složité dotazy, což pomáhá zlepšit výkon databáze.
V této sekci představujeme pět praktických případů použití dočasných tabulek.
Vysvětlujeme, jak je lze použít v reálných scénářích, spolu se vzorovým SQL.
5-1. Optimalizace výkonu dotazů (snížení zátěže JOIN)
Problém
Při zpracování velkých datových sad může přímé provádění operací JOIN snižovat výkon.
Řešení
Použijte dočasnou tabulku k předběžnému filtrování cílových dat před provedením JOIN, čímž snížíte zátěž zpracování.
Příklad: Získání dat objednávek pro aktivní uživatele
-- First, store only active users in a temporary table
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';
-- Perform JOIN using the temporary table
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
Výhody
- Snižuje zátěž JOIN tím, že cílí pouze na aktivní uživatele místo celé tabulky
users - Zjednodušuje hlavní dotaz, zlepšuje čitelnost
5-2. Dočasné zpracování agregací
Problém
Opakované spouštění stejného agregačního dotazu může snižovat výkon.
Řešení
Uložte výsledky agregace jednou do dočasné tabulky, abyste předešli zbytečným opakovaným výpočtům.
Příklad: Uložení měsíčních prodejních dat do dočasné tabulky
-- Calculate monthly total sales and store in a temporary table
CREATE TEMPORARY TABLE temp_monthly_sales AS
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(total_price) AS total_sales
FROM orders
GROUP BY month;
-- Retrieve aggregated results
SELECT * FROM temp_monthly_sales WHERE total_sales > 100000;
Výhody
- Znovu použít agregovaná data vícekrát
- Zlepšit výkon vyhnutím se redundantním výpočtům
5-3. Ukládání mezilehlých dat pro dávkové zpracování
Problém
When performing bulk updates or deletes, errors during processing can leave data in an inconsistent state.
Solution
Use a temporary table to store intermediate data and maintain data consistency.
Example: Update order data under specific conditions
-- Store target rows in a temporary table
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';
-- Perform update based on the temporary table
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1; -- Increase price by 10%
Benefits
- Safely update only selected data
- Easy to verify data before and after updates
5-4. Per-User Temporary Data Management
Problem
If temporary user-specific data is stored in a regular table, unnecessary data may accumulate over time.
Solution
Temporary tables automatically remove data when the session ends, eliminating maintenance overhead.
Example: Store search results in a temporary table
-- Store user-specific search results
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';
-- Display search results
SELECT * FROM temp_search_results;
Benefits
- Data is automatically removed when the session ends
- Temporary search results can be reused during the session
5-5. Choosing Between Temporary Tables and Views
Problem
When optimizing frequently executed queries, you may wonder whether to use a temporary table or a VIEW, especially if temporary data storage is required.
Solution
- If data does not change frequently → Use a view (VIEW)
- If data changes frequently or needs materialization → Use a temporary table
Example: Using a temporary table
CREATE TEMPORARY TABLE temp_high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
SELECT * FROM temp_high_value_customers;
Example: Using a view
CREATE VIEW high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
Benefits
- Temporary tables store data physically, which can improve performance
- Views are convenient for query reuse, but performance may decrease with large datasets
Summary
In this section, we introduced five practical use cases for MySQL temporary tables.
✔ Quick recap
- Optimize query performance (reduce JOIN overhead) → Store only required data in a temporary table before performing JOIN
- Temporary aggregation processing → Store aggregated results to avoid repeated calculations
- Intermediate data for batch processing → Safely handle large-scale updates
- Per-user temporary data management → Data is automatically removed when the session ends
- Choose between temporary tables and views → Use temporary tables for changing data, views for stable query reuse
6. Three Important Precautions When Using MySQL Temporary Tables Safely
Introduction
MySQL temporary tables operate independently per session and are automatically removed under certain conditions, making them a convenient feature. However, improper use can lead to performance degradation or unexpected errors.
In this section, we explain three important precautions to ensure safe use of temporary tables.
6-1. Precaution 1: Do Not Over-Rely on Automatic Removal
Problem
Because temporary tables are automatically removed when the session ends, it may seem unnecessary to drop them explicitly. However, this can sometimes
- Dlouho běžící spojení nadále spotřebovávají paměť
- Pokud zůstane relace otevřená, dočasné tabulky nejsou odstraněny a nadále spotřebovávají prostředky databáze.
- Nedostatečné explicitní odstranění může způsobit konstrukční chyby
- Pokud se dávkový proces neočekávaně znovu připojí, dočasná tabulka může zmizet a způsobit chyby.
Řešení
- Explicitně odstraňte dočasné tabulky, když již nejsou potřeba, pomocí
DROP TEMPORARY TABLE - V dlouho běžících spojeních (např. dávkové úlohy) odstraňujte dočasné tabulky periodicky
Příklad: Explicitně odstranit dočasnou tabulku
DROP TEMPORARY TABLE IF EXISTS temp_users;
Klíčový bod
- Přidání
IF EXISTSzabraňuje chybám, pokud tabulka neexistuje.
6-2. Opatření 2: Vyhnout se konfliktům názvů s běžnými tabulkami
Problém
Můžete vytvořit dočasnou tabulku se stejným názvem jako běžná tabulka. Avšak když tak učiníte, běžná tabulka se stane dočasně neviditelnou.
Příklad problému
-- A regular users table exists
SELECT * FROM users;
-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- This now returns data from the temporary table, not the regular one
SELECT * FROM users;
Dokud existuje dočasná tabulka, běžná tabulka se stejným názvem je skryta, což může vést k neočekávaným chybám při načítání dat.
Řešení
- Používejte předponu jako „temp_“ pro názvy dočasných tabulek
- Zavést jasnou konvenci pojmenování, která odliší dočasné a běžné tabulky
Příklad: Bezpečné vytvoření dočasné tabulky
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
Výhody
- Použití předpony
temp_zabraňuje konfliktům s běžnou tabulkouusers. - Usnadňuje rozlišení tabulek v aplikačním kódu.
6-3. Opatření 3: Indexy a omezení nejsou automaticky zděděny
Problém
Pokud vytvoříte tabulku pomocí CREATE TEMPORARY TABLE ... AS SELECT ..., indexy a omezení z původní tabulky nejsou zděděny, což může snížit výkon.
Příklad problému
-- Regular users table (with indexes)
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
-- Create temporary table (indexes are NOT inherited)
CREATE TEMPORARY TABLE temp_users AS
SELECT id, email, name FROM users;
V tomto případě nejsou PRIMARY KEY a UNIQUE omezení přeneseny do temp_users, což může zpomalit vyhledávání a umožnit duplicitní data.
Řešení
- Explicitně přidejte indexy po vytvoření dočasné tabulky
- Pokud definujete sloupce ručně pomocí
CREATE TEMPORARY TABLE, specifikujte indexy během vytváření
Příklad: Přidat indexy ručně
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
ALTER TABLE temp_users ADD INDEX idx_email (email);
Tento přístup vám umožní vytvořit dočasnou tabulku s indexy podobnými původní tabulce.
Shrnutí
V této sekci jsme vysvětlili tři důležitá opatření pro bezpečné používání dočasných tabulek.
✔ Rychlý přehled
- Nespoléhejte se nadměrně na automatické odstraňování
- Explicitně odstraňujte dočasné tabulky pomocí
DROP TEMPORARY TABLE - Periodicky je odstraňujte v dlouho běžících relacích
- Vyhněte se konfliktům názvů s běžnými tabulkami
- Pokud existuje běžná tabulka se stejným názvem, dočasná tabulka má přednost
- Použijte předponu jako
temp_pro jasné rozlišení
- Indexy a omezení nejsou automaticky zděděny
- Při použití
CREATE TEMPORARY TABLE ... AS SELECT ...jsou indexy ztraceny - Přidejte indexy ručně po vytvoření
Pokud budete mít tyto body na paměti, můžete bezpečně využívat dočasné tabulky MySQL a zároveň zlepšit výkon databáze.
7. 10 Často kladených otázek (FAQ) o dočasných tabulkách MySQL
Úvod
V této sekci odpovídáme na 10 často kladených otázek o dočasných tabulkách MySQL.
Pokrýváme jak fungují, jejich omezení, výkonnostní úvahy a řešení problémů v praktických scénářích.
7-1. Otázky o základních specifikacích
Q1. Lze dočasnou tabulku přistupovat z jiné relace?
A. Ne, nelze.
Dočasná tabulka je platná pouze v rámci relace, která ji vytvořila, a nelze k ní přistupovat z jiných relací.
-- Created in Session A
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- Attempt to access from Session B (results in error)
SELECT * FROM temp_users;
Chyba:
ERROR 1146 (42S02): Table 'temp_users' doesn't exist
Pokud potřebujete sdílet data mezi relacemi, musíte použít běžnou tabulku.
Q2. Jsou dočasné tabulky ukládány na disk?
A. Obvykle jsou ukládány v paměti, ale mohou být přesunuty na disk za určitých podmínek.
Pokud velikost tabulky překročí tmp_table_size nebo max_heap_table_size, MySQL může vytvořit dočasnou tabulku na disku pomocí InnoDB nebo MyISAM.
SHOW VARIABLES LIKE 'tmp_table_size';
Pro zlepšení výkonu nakonfigurujte tmp_table_size vhodně.
Q3. Mohu vytvořit indexy na dočasné tabulce?
A. Ano, můžete.
Můžete definovat PRIMARY KEY nebo INDEX stejně jako u běžné tabulky.
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
ALTER TABLE temp_users ADD INDEX idx_email (email);
Nicméně, pokud použijete CREATE TEMPORARY TABLE ... AS SELECT ..., indexy nejsou zděděny, takže je musíte přidat ručně.
7-2. Otázky o výkonu a chování
Q4. Existují změny v dočasných tabulkách v MySQL 8.0?
A. MySQL 8.0 zavedla Common Table Expressions (CTE) pomocí klauzule WITH.
Od MySQL 8.0 můžete zpracovávat dočasné výsledkové sady pomocí CTE, aniž byste explicitně vytvářeli dočasnou tabulku.
WITH temp_users AS (
SELECT id, name FROM users WHERE status = 'active'
)
SELECT * FROM temp_users;
Použití CTE místo dočasných tabulek může zjednodušit dotazy a snížit využití paměti.
Q5. Jaký je rozdíl mezi dočasnou tabulkou a tabulkou MEMORY?
A. Tabulka MEMORY přetrvává i po ukončení relace, zatímco dočasná tabulka ne.
Dočasná tabulka je odstraněna, když relace skončí, zatímco tabulka MEMORY zůstává až do restartu serveru (nebo je explicitně odstraněna).
CREATE TABLE memory_table (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
Kdy použít kterou?
- Dočasná tabulka: Krátkodobé zpracování v rámci relace
- MEMORY tabulka: Vysoce rychlý přístup se serverovou perzistencí
7-3. Otázky o mazání a řešení problémů
Q6. Mohu odstranit dočasnou tabulku pomocí DROP TABLE?
A. Ne, musíte použít DROP TEMPORARY TABLE.
Vždy použijte DROP TEMPORARY TABLE při odstraňování dočasné tabulky.
DROP TEMPORARY TABLE temp_users;
Použití běžného DROP TABLE může vést k chybě.
Q7. Proč SHOW TABLES nezobrazuje dočasné tabulky?
A. Dočasné tabulky nejsou uvedeny v SHOW TABLES.
Pro kontrolu jejich existence dotazujte INFORMATION_SCHEMA.
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'temp_users';
Pokud není vrácen žádný výsledek, dočasná tabulka mohla být již odstraněna.
Shrnutí
V této sekci jsme pokryli 10 často kladených otázek o dočasných tabulkách MySQL.
✔ Rychlý přehled
- Dočasné tabulky nelze přistupovat z jiných relací
- Jsou vytvořeny v paměti, ale mohou se přesunout na disk, pokud jsou velké
- Indexy je třeba definovat ručně, pokud se používá AS SELECT
- CTE (
WITH) jsou k dispozici v MySQL 8.0+ - Na rozdíl od MEMORY tabulek, dočasné tabulky zmizí na konci relace
- Použijte
DROP TEMPORARY TABLEk jejich odstranění SHOW TABLESnezobrazuje dočasné tabulky
8. Shrnutí: Klíčové body pro efektivní používání dočasných tabulek MySQL
Úvod
Dočasné tabulky MySQL jsou výkonný nástroj pro ukládání mezilehlých dat a optimalizaci výkonu dotazů.
Zde shrnujeme klíčové body, které byly v tomto průvodci diskutovány.
8-1. Základní koncepty dočasných tabulek MySQL
Co je dočasná tabulka?
- Existuje nezávisle pro každou relaci
- Je automaticky odstraněna při ukončení relace
- Podporuje
INSERT,UPDATEaDELETEjako běžná tabulka
Základní syntaxe vytvoření
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
Hlavní případy použití
- Dočasné ukládání dat
- Optimalizace výkonu dotazů
- Mezilehlé tabulky pro dávkové zpracování
- Správa dočasných dat na úrovni uživatele
8-2. Výhody dočasných tabulek
1) Zlepšení výkonu dotazů
- Snížení zátěže JOIN operací
- Provádění agregace předem pro snížení opakovaných výpočtů
- Zjednodušení dotazů vyloučením nepotřebných dat
Příklad: Snížení zátěže JOIN
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
2) Dočasné ukládání a správa na úrovni relace
- Automaticky odstraněno na konci relace
- Ideální pro krátkodobé ukládání dat
- Nezávislá manipulace s daty, aniž by ovlivňovala jiné relace
Příklad: Dočasné ukládání výsledků vyhledávání
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';
SELECT * FROM temp_search_results;
3) Bezpečné aktualizace dat
- Užitečné jako mezilehlá tabulka při dávkovém zpracování
- Může sloužit jako záloha během aktualizací dat
- Efektivní pro tvorbu testových datových sad
Příklad: Bezpečná aktualizace dat
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1;
8-3. Nevýhody a opatření
1) Data zmizí po ukončení relace
- Nevhodné pro trvalé ukládání
- Použijte běžné tabulky pro dlouhodobou perzistenci
2) Nelze sdílet mezi relacemi
- Není přístupné z jiných spojení
- Použijte běžné tabulky při sdílení dat mezi uživateli
3) Indexy a omezení nejsou automaticky zděděny
CREATE TEMPORARY TABLE ... AS SELECT ...nevytváří indexy- Přidejte indexy ručně, pokud jsou potřeba
ALTER TABLE temp_users ADD INDEX idx_email (email);
8-4. Nejlepší postupy pro bezpečné používání
✅ Explicitně odstranit, když již není potřeba
DROP TEMPORARY TABLE IF EXISTS temp_users;
✅ Vyhněte se kolizím názvů s běžnými tabulkami
- Použijte předponu
temp_CREATE TEMPORARY TABLE temp_users (...);
✅ Navrhněte s ohledem na výkon
- Pokud tabulka naroste a přesune se na disk, zvažte úpravu
tmp_table_sizeSHOW VARIABLES LIKE 'tmp_table_size';
8-5. Dočasné tabulky vs alternativy (pohledy a CTE)
Je také důležité zvážit, kdy použít dočasné tabulky oproti pohledům (VIEW) nebo CTE (Common Table Expressions).
| Method | Characteristics | Best Use Case |
|---|---|---|
| Temporary table | Removed at session end | When you need to store intermediate data |
| View (VIEW) | Data retrieved in real time; performance may degrade with large datasets | Save and reuse frequently referenced queries |
| CTE (WITH clause) | Virtual table valid only within a single query | Handle temporary data without creating a table |
Shrnutí
V tomto průvodci jsme pokryli všechny klíčové aspekty dočasných tabulek MySQL.
✔ Rychlý přehled
- Dočasné tabulky jsou automaticky odstraněny po ukončení relace
- Pomáhají optimalizovat výkon snížením režie JOIN a agregací
- Užitečné pro dávkové zpracování, dočasné výsledky vyhledávání a testovací data
- Nelze je sdílet mezi relacemi a indexy je třeba přidávat ručně, pokud jsou potřeba
- Volba mezi dočasnými tabulkami, pohledy a CTE umožňuje flexibilní správu dat
Nyní jste dokončili všechny sekce průvodce dočasnými tabulkami v MySQL! 🎉
Použijte tento odkaz k efektivnímu využití dočasných tabulek ve vašich MySQL projektech.


