Tabel Sementara MySQL: Membuat, Menggunakan, Menghapus + Praktik Terbaik (Dengan Contoh SQL)

目次

1. (Ramah-Pemula) Apa Itu Tabel Sementara MySQL? Perbedaan dengan Tabel Biasa

Pendahuluan

Saat mengelola data dengan MySQL, ada kalanya Anda perlu menyimpan data secara sementara. Misalnya, ketika memproses dataset yang besar, Anda mungkin ingin menyimpan hasil perantara saat bekerja. Dalam kasus tersebut, tabel sementara (Temporary Table) sangat berguna.

Dalam artikel ini, kami akan menjelaskan mekanisme dasar tabel sementara MySQL dan bagaimana mereka berbeda dari tabel biasa.

1-1. Apa Itu Tabel Sementara?

Tabel sementara adalah tabel khusus yang hanya ada selama sesi basis data (koneksi).
Berbeda dengan tabel biasa, tabel ini secara otomatis dihapus ketika sesi berakhir, menjadikannya ideal untuk menyimpan data sementara.

Fitur Utama Tabel Sementara

  • Terisolasi per sesi Tabel sementara hanya dapat diakses dalam sesi yang membuatnya. Sesi lain tidak dapat merujuknya.
  • Secara otomatis dihapus ketika sesi berakhir Tabel sementara menghilang secara otomatis ketika sesi berakhir, bahkan jika Anda tidak menjatuhkannya secara eksplisit.
  • Anda dapat membuat tabel sementara dengan nama yang sama Tidak seperti tabel biasa, dimungkinkan untuk membuat tabel sementara dengan nama yang sama di sesi yang berbeda .

1-2. Perbedaan dengan Tabel Biasa

Tabel sementara dan tabel biasa berbeda dalam hal-hal berikut.

ComparisonTemporary TableRegular Table
Data retentionValid only during the session (automatically removed)Stored permanently
Access scopeOnly within the session that created itAccessible to all users (subject to privileges)
Name conflictsYou can create temporary tables with the same nameYou cannot create another table with the same name in the same database
Required privilegesRequires the CREATE TEMPORARY TABLES privilegeRequires the standard CREATE TABLE privilege
IndexesSupportedSupported
PerformanceOften created in memory and can be fastStored on disk; performance can degrade as data grows

Mana yang harus Anda gunakan?

  • Jika Anda hanya membutuhkan data secara sementara dan dapat dibuang setelah pemrosesanTabel sementara
  • Jika Anda ingin menyimpan data secara permanen dan menggunakannya kembali nantiTabel biasa

Misalnya, tabel sementara sangat berguna untuk tugas seperti analisis data berskala besar atau agregasi sementara.

1-3. Kapan Anda Membutuhkan Tabel Sementara

Tabel sementara MySQL terutama berguna dalam situasi berikut.

1) Meningkatkan kinerja kueri

Misalnya, ketika melakukan operasi JOIN yang kompleks, Anda dapat mengurangi waktu pemrosesan dengan membuat tabel sementara untuk menyimpan data perantara terlebih dahulu.

Contoh: Mengurangi beban JOIN
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';

Dengan menyimpan data target dalam tabel sementara terlebih dahulu dan kemudian menjalankan JOIN, kinerja dapat meningkat.

2) Menyimpan data secara sementara

Tabel sementara juga berguna ketika sebuah aplikasi perlu mengelola data secara sementara.
Misalnya, Anda dapat menyimpan data yang dicari pengguna dalam tabel sementara dan menghapusnya setelah sesi berakhir.

3) Tabel perantara untuk pemrosesan batch

Saat memproses sejumlah besar data, menggunakan tabel sementara sebagai tabel perantara dapat meningkatkan stabilitas proses.

1-4. Batasan Tabel Sementara

Tabel sementara memang praktis, tetapi ada beberapa batasan.

1) Secara otomatis dihapus ketika sesi berakhir

Karena tabel sementara secara otomatis dihapus ketika sesi berakhir, mereka tidak cocok untuk menyimpan data secara permanen.

2) Tidak dapat diakses dari sesi lain

Tabel sementara hanya dapat digunakan dalam sesi yang membuatnya, sehingga tidak dapat dibagikan dengan pengguna atau proses lain.

3) Potensi konflik dengan tabel biasa yang memiliki nama sama

Jika ada tabel biasa dengan nama yang sama, membuat tabel sementara dengan nama tersebut akan membuat tabel biasa menjadi tidak terlihat sementara, jadi berhati-hatilah.

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(255));
SELECT * FROM users; -- This query references the temporary table data

Seperti yang ditunjukkan di atas, setelah tabel sementara dibuat, Anda tidak dapat mengakses tabel biasa dengan nama yang sama sampai tabel sementara tersebut hilang. Pilih nama tabel dengan hati-hati.

Ringkasan

Tabel sementara MySQL adalah fitur yang praktis untuk penyimpanan data sementara dan optimasi kueri.
Dengan memahami bagaimana mereka berbeda dari tabel biasa dan menggunakannya secara tepat, Anda dapat memproses data lebih efisien.

✔ Ringkasan Cepat

  • Tabel sementara secara otomatis dihapus ketika sesi berakhir
  • Berbeda dengan tabel biasa, mereka terisolasi per sesi
  • Bagus untuk penyimpanan sementara dan meningkatkan kinerja kueri
  • Tidak cocok untuk penyimpanan permanen karena data menghilang ketika sesi berakhir
  • Tidak dapat diakses dari sesi lain, dan dapat berbenturan dengan tabel biasa yang memiliki nama sama

2. (Dengan Contoh Kode) Cara Membuat Tabel Sementara di MySQL

Pendahuluan

Pada bagian sebelumnya, kami menjelaskan konsep dasar tabel sementara dan bagaimana perbedaannya dengan tabel biasa.
Pada bagian ini, kami akan menjelaskan cara membuat tabel sementara dan cara bekerja dengan data di dalamnya.

Membuat tabel sementara itu sederhana, tetapi jika Anda tidak menggunakan sintaks yang benar, tabel tersebut mungkin tidak berperilaku seperti yang diharapkan. Bagian ini menjelaskan sintaks dasar, pembuatan dari tabel yang ada, dan cara mengonfirmasi tabel sementara secara detail.

2-1. Sintaks Dasar untuk Tabel Sementara

Untuk membuat tabel sementara, gunakan pernyataan CREATE TEMPORARY TABLE.

Sintaks dasar

CREATE TEMPORARY TABLE table_name (
    column_name data_type [constraints],
    column_name data_type [constraints],
    ...
);

Sintaksnya hampir sama dengan CREATE TABLE, tetapi menambahkan TEMPORARY menjadikannya tabel sementara.

Contoh: Menyimpan informasi pengguna dalam tabel sementara

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Tabel temp_users ini hanya berlaku dalam sesi saat ini dan secara otomatis dihapus ketika sesi berakhir.

2-2. Membuat Tabel Sementara Berdasarkan Data dari Tabel yang Ada

Anda juga dapat membuat tabel sementara berdasarkan data dari tabel yang ada.

Sintaks

CREATE TEMPORARY TABLE temp_table_name AS
SELECT * FROM existing_table WHERE condition;

Contoh: Menyimpan hanya pengguna aktif dalam tabel sementara

CREATE TEMPORARY TABLE active_users AS
SELECT id, name, email FROM users WHERE status = 'active';

Metode ini mengekstrak hanya pengguna dengan status = 'active' dari tabel users dan menyimpannya dalam tabel sementara baru bernama active_users.

Poin penting
  • Menyalin data dari tabel yang ada apa adanya
  • Tipe data kolom ditetapkan secara otomatis
  • Indeks tidak disalin, jadi tambahkan secara eksplisit jika diperlukan

2-3. Cara Memeriksa Data Tabel Sementara

Daftar tabel

SHOW TABLES;

Namun, tabel sementara tidak akan muncul dalam daftar dari SHOW TABLES biasa.

Periksa struktur tabel sementara

DESC temp_users;

atau

SHOW CREATE TABLE temp_users;

Ini memungkinkan Anda memeriksa struktur kolom dan batasan untuk tabel sementara.

2-4. Menyisipkan Data ke Tabel Sementara

Menyisipkan data ke tabel sementara sama seperti pada tabel biasa.

Menyisipkan data

INSERT INTO temp_users (name, email) VALUES 
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');

Memeriksa data

SELECT * FROM temp_users;

Ini mengonfirmasi bahwa data telah disimpan dalam tabel sementara.

2-5. Catatan Saat Membuat Tabel Sementara

1) Waspadai konflik nama tabel

Jika Anda membuat tabel sementara dengan nama yang sama dengan tabel biasa, tabel sementara memiliki prioritas, dan tabel biasa menjadi tidak dapat diakses sementara.

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
SELECT * FROM users; -- This returns data from the temporary table

Untuk alasan ini, disarankan menggunakan awalan seperti “temp_” untuk nama tabel sementara.

2) Indeks tidak diwariskan secara otomatis

Ketika Anda menyalin data dari tabel yang ada, indeks tidak diterapkan secara otomatis.
Jika diperlukan, Anda harus menambahkan indeks secara eksplisit.

ALTER TABLE temp_users ADD INDEX (email);

3) Anda memerlukan hak istimewa untuk membuat tabel sementara

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.

Ringkasan

In this section, we explained how to create temporary tables.

✔ Ringkasan cepat

  • Buat tabel sementara dengan CREATE TEMPORARY TABLE
  • Anda juga dapat membuatnya dengan menyalin data dari tabel yang ada
  • Secara otomatis dihapus ketika sesi berakhir
  • Indeks tidak diterapkan secara otomatis—hati-hati
  • Gunakan awalan seperti “temp_” untuk menghindari konflik nama
  • Anda memerlukan hak istimewa yang tepat (CREATE TEMPORARY TABLES)

3. Cara Memanipulasi Data dalam Tabel Sementara MySQL (INSERT, UPDATE, DELETE)

Pendahuluan

In the previous section, we explained how to create a temporary table in MySQL.
In this section, we will explain how to insert, update, and delete data in a temporary table using specific SQL commands.

Temporary tables support the same data operations as regular tables,
but there are some important notes to keep in mind, which we will also cover.

3-1. Menyisipkan data ke dalam tabel sementara (INSERT)

To add data to a temporary table, use the INSERT INTO statement, just like with a regular table.

Sintaks dasar

INSERT INTO temp_table_name (column1, column2, ...) 
VALUES (value1, value2, ...);

Contoh: Menambahkan informasi pengguna

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');

Menyisipkan data yang ada menggunakan INSERT…SELECT

You can also fetch data from an existing table and insert it into a temporary table.

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. Memperbarui data dalam tabel sementara (UPDATE)

To change data in a temporary table, use the UPDATE statement.

Sintaks dasar

UPDATE temp_table_name 
SET column_name = value
WHERE condition;

Contoh: Memperbarui nama pengguna

UPDATE temp_users 
SET name = 'Ichiro Tanaka'
WHERE email = 'tanaka@example.com';

Pembaruan massal untuk baris yang cocok dengan kondisi

For example, if you want to change email addresses under a specific domain to example.jp, you can write:

UPDATE temp_users 
SET email = REPLACE(email, 'example.com', 'example.jp')
WHERE email LIKE '%@example.com';

3-3. Menghapus data dari tabel sementara (DELETE)

To delete data, use the DELETE statement.

Sintaks dasar

DELETE FROM temp_table_name WHERE condition;

Contoh: Menghapus data pengguna tertentu

DELETE FROM temp_users WHERE email = 'tanaka@example.com';

Menghapus semua baris (perbedaan dengan TRUNCATE)

If you want to delete all rows, you can write:

DELETE FROM temp_users;

In contrast, for regular tables, you can often delete all rows faster using TRUNCATE TABLE. However, you cannot use TRUNCATE on a temporary table in MySQL.

TRUNCATE TABLE temp_users; -- Error (cannot be used on temporary tables in MySQL)

Therefore, to remove all rows from a temporary table, you must use DELETE.

3-4. Catatan saat memanipulasi data dalam tabel sementara

1) Data menghilang ketika sesi berakhir

A temporary table is automatically removed when the session (connection) ends,
so it is not suitable for use cases that require persistent data storage.

2) Tidak dapat diakses dari sesi lain

A temporary table is valid only within the session that created it, and cannot be accessed from other sessions.

SELECT * FROM temp_users;

Jika Anda menjalankan SQL ini di sesi lain, Anda akan mendapatkan error “Table ‘temp_users’ doesn’t exist”.

3) Indeks pada tabel sementara tidak diterapkan secara otomatis

Jika Anda membuat tabel menggunakan CREATE TEMPORARY TABLE ... AS SELECT ...,
indeks dari tabel asli tidak diwariskan. Jika diperlukan, tambahkan indeks secara manual menggunakan ALTER TABLE.

ALTER TABLE temp_users ADD INDEX (email);

Ringkasan

Pada bagian ini, kami membahas manipulasi data (INSERT, UPDATE, DELETE) untuk tabel sementara.

✔ Ringkasan cepat

  • Gunakan INSERT untuk menambahkan data ( INSERT INTO ... VALUES / INSERT INTO ... SELECT )
  • Gunakan UPDATE untuk memodifikasi data (pembaruan bersyarat dan memanfaatkan REPLACE() )
  • Gunakan DELETE untuk menghapus data ( DELETE FROM ... WHERE ; TRUNCATE tidak diizinkan)
  • Tabel sementara dihapus ketika sesi berakhir
  • Tidak dapat diakses dari sesi lain
  • Indeks tidak diwariskan secara otomatis; tambahkan secara manual jika diperlukan

4. Apakah Tabel Sementara MySQL Dihapus Secara Otomatis? Cara Menghapusnya Secara Manual

Pendahuluan

Berbeda dengan tabel biasa, tabel sementara MySQL (Temporary Table) dihapus secara otomatis ketika sesi berakhir. Namun, ada kasus di mana Anda mungkin perlu menghapusnya secara manual.

Pada bagian ini, kami menjelaskan cara kerja penghapusan otomatis dan cara menghapus tabel sementara secara manual secara detail.

4-1. Cara kerja penghapusan otomatis untuk tabel sementara

1) Dihapus secara otomatis ketika sesi berakhir

Tabel sementara MySQL dihapus secara otomatis ketika sesi (koneksi basis data) yang membuatnya berakhir.
Karena itu, biasanya Anda tidak perlu menghapusnya secara manual.

Contoh: Penghapusan otomatis ketika sesi berakhir
-- 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;

Pada titik ini, tabel sementara temp_users dihapus secara otomatis.

2) Tabel sementara tetap ada selama sesi berlanjut

Karena tabel sementara dikelola per sesi, mereka tidak dihapus selama sesi tetap terbuka.

SELECT * FROM temp_users; -- Data can be retrieved if the session is still active

Dengan kata lain, tabel sementara tetap berada di memori sampai Anda menutup klien MySQL (atau program terputus).

4-2. Cara menghapus tabel sementara secara manual

Anda juga dapat menghapus tabel sementara secara manual.
Di MySQL, gunakan DROP TEMPORARY TABLE untuk menghapus tabel sementara.

1) Gunakan DROP TEMPORARY TABLE

DROP TEMPORARY TABLE temp_users;

Ini langsung menghapus tabel sementara temp_users.

2) Tambahkan IF EXISTS untuk menghindari error

Jika tabel tidak ada, Anda dapat menggunakan IF EXISTS untuk menghindari error.

DROP TEMPORARY TABLE IF EXISTS temp_users;

Sintaks ini mencegah error meskipun tabel tidak ada.

3) Berbeda dengan DROP TABLE biasa

Jika Anda mencoba menghapus tabel sementara menggunakan DROP TABLE biasa, Anda mungkin melihat error seperti berikut:

DROP TABLE temp_users;

Error:

ERROR 1051 (42S02): Unknown table 'temp_users'

Karena MySQL mengelola tabel reguler dan tabel sementara secara terpisah, Anda harus menggunakan DROP TEMPORARY TABLE saat menghapus tabel sementara.

4-3. Cara memastikan tabel sementara telah dihapus

1) Anda tidak dapat memastikan dengan SHOW TABLES

Tabel sementara tidak akan muncul dalam output SHOW TABLES.

SHOW TABLES;

Tabel sementara tidak terdaftar

2) Konfirmasi menggunakan INFORMATION_SCHEMA

Anda dapat memeriksa apakah tabel sementara ada dengan melakukan query pada INFORMATION_SCHEMA.

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

Jika kueri ini mengembalikan hasil, itu menunjukkan bahwa tabel sementara ada.

4-4. Catatan saat menghapus tabel sementara

1) Tabel sementara berbeda per sesi

Anda dapat membuat tabel sementara dengan nama yang sama di beberapa sesi.
Anda tidak dapat menghapus tabel sementara yang dibuat oleh sesi lain.

Contoh
-- Created in session A
CREATE TEMPORARY TABLE temp_data (id INT);

-- Attempt to drop in session B
DROP TEMPORARY TABLE temp_data;

Terjadi kesalahan:

ERROR 1051 (42S02): Unknown table 'temp_data'

Tabel sementara hanya dapat dihapus dalam sesi yang membuatnya.

2) Potensi konflik dengan tabel reguler dengan nama yang sama

Jika sebuah tabel sementara memiliki nama yang sama dengan tabel reguler,
tabel sementara memiliki prioritas, dan tabel reguler menjadi tidak terlihat.

Contoh
-- 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;

Solusi:

  • Gunakan awalan seperti temp_ untuk tabel sementara guna menghindari konflik penamaan.

Ringkasan

Pada bagian ini, kami menjelaskan cara kerja penghapusan tabel sementara dan cara menghapusnya.

✔ Ringkasan cepat

  • Tabel sementara secara otomatis dihapus ketika sesi berakhir
  • Mereka tetap ada selama sesi aktif
  • Untuk menghapus secara manual, gunakan DROP TEMPORARY TABLE
  • Tambahkan IF EXISTS untuk menghindari kesalahan
  • Anda tidak dapat mengonfirmasi tabel sementara dengan SHOW TABLES
  • Anda hanya dapat menghapus tabel sementara dalam sesi yang membuatnya
  • Gunakan awalan untuk menghindari konflik dengan tabel reguler yang memiliki nama sama

5. 5 Kasus Penggunaan Praktis untuk Tabel Sementara MySQL (Termasuk Optimasi Kinerja)

Pendahuluan

Tabel sementara MySQL memungkinkan Anda menyimpan data menengah dan menyederhanakan kueri kompleks, membantu meningkatkan kinerja basis data.

Pada bagian ini, kami memperkenalkan lima kasus penggunaan praktis untuk tabel sementara.
Kami menjelaskan cara penggunaannya dalam skenario dunia nyata, beserta contoh SQL.

5-1. Optimalkan Kinerja Kueri (Kurangi Beban JOIN)

Masalah

Saat memproses dataset besar, mengeksekusi operasi JOIN secara langsung dapat menurunkan kinerja.

Solusi

Gunakan tabel sementara untuk memfilter data target terlebih dahulu sebelum melakukan JOIN, mengurangi beban pemrosesan.

Contoh: Mengambil data pesanan untuk pengguna aktif
-- 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;
Manfaat
  • Mengurangi beban JOIN dengan menargetkan hanya pengguna aktif alih-alih seluruh tabel users
  • Menyederhanakan kueri utama, meningkatkan keterbacaan

5-2. Pemrosesan Agregasi Sementara

Masalah

Menjalankan kueri agregasi yang sama berulang-ulang dapat menurunkan kinerja.

Solusi

Simpan hasil agregasi dalam tabel sementara sekali untuk menghindari perhitungan berulang yang tidak perlu.

Contoh: Menyimpan data penjualan bulanan dalam tabel sementara
-- 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;
Manfaat
  • Gunakan kembali data agregasi berkali-kali
  • Meningkatkan kinerja dengan menghindari perhitungan berulang

5-3. Menyimpan Data Menengah untuk Pemrosesan Batch

Masalah

Saat melakukan pembaruan atau penghapusan secara massal, kesalahan selama pemrosesan dapat meninggalkan data dalam keadaan tidak konsisten.

Solusi

Gunakan tabel sementara untuk menyimpan data intermediate dan menjaga konsistensi data.

Contoh: Pembaruan data pesanan di bawah kondisi tertentu
-- 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%
Manfaat
  • Pembaruan data yang dipilih secara aman
  • Mudah untuk memverifikasi data sebelum dan sesudah pembaruan

5-4. Manajemen Data Sementara Per Pengguna

Masalah

Jika data sementara khusus pengguna disimpan dalam tabel biasa, data yang tidak perlu mungkin menumpuk seiring waktu.

Solusi

Tabel sementara secara otomatis menghapus data saat sesi berakhir, menghilangkan beban pemeliharaan.

Contoh: Menyimpan hasil pencarian dalam tabel sementara
-- 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;
Manfaat
  • Data secara otomatis dihapus saat sesi berakhir
  • Hasil pencarian sementara dapat digunakan kembali selama sesi

5-5. Memilih Antara Tabel Sementara dan View

Masalah

Saat mengoptimalkan kueri yang sering dieksekusi, Anda mungkin bertanya-tanya apakah menggunakan tabel sementara atau VIEW, terutama jika penyimpanan data sementara diperlukan.

Solusi

  • Jika data tidak berubah seringGunakan view (VIEW)
  • Jika data berubah sering atau memerlukan materialisasiGunakan tabel sementara
Contoh: Menggunakan tabel sementara
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;
Contoh: Menggunakan 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;
Manfaat
  • Tabel sementara menyimpan data secara fisik, yang dapat meningkatkan performa
  • View nyaman untuk penggunaan kembali kueri, tetapi performa mungkin menurun dengan dataset besar

Ringkasan

Dalam bagian ini, kami memperkenalkan lima kasus penggunaan praktis untuk tabel sementara MySQL.

✔ Ringkasan Cepat

  1. Optimalkan performa kueri (kurangi beban JOIN) → Simpan hanya data yang diperlukan dalam tabel sementara sebelum melakukan JOIN
  2. Pemrosesan agregasi sementara → Simpan hasil agregasi untuk menghindari perhitungan berulang
  3. Data intermediate untuk pemrosesan batch → Tangani pembaruan skala besar secara aman
  4. Manajemen data sementara per pengguna → Data secara otomatis dihapus saat sesi berakhir
  5. Pilih antara tabel sementara dan view → Gunakan tabel sementara untuk data yang berubah, view untuk penggunaan kembali kueri yang stabil

6. Tiga Peringatan Penting Saat Menggunakan Tabel Sementara MySQL Secara Aman

Pengantar

Tabel sementara MySQL beroperasi secara independen per sesi dan secara otomatis dihapus di bawah kondisi tertentu, menjadikannya fitur yang nyaman. Namun, penggunaan yang tidak tepat dapat menyebabkan penurunan performa atau kesalahan yang tidak terduga.

Dalam bagian ini, kami menjelaskan tiga peringatan penting untuk memastikan penggunaan tabel sementara yang aman.

6-1. Peringatan 1: Jangan Terlalu Bergantung pada Penghapusan Otomatis

Masalah

Karena tabel sementara secara otomatis dihapus saat sesi berakhir, mungkin tampak tidak perlu untuk menghapusnya secara eksplisit. Namun, hal ini terkadang dapat menyebabkan masalah yang tidak diinginkan.

Contoh Masalah

  • Koneksi yang berjalan lama terus mengonsumsi memori
  • Jika sesi tetap terbuka, tabel sementara tidak dihapus dan terus mengonsumsi sumber daya basis data.
  • Kegagalan untuk menghapus secara eksplisit dapat menyebabkan cacat desain
  • Jika proses batch terhubung kembali secara tak terduga, tabel sementara dapat menghilang dan menyebabkan kesalahan.

Solusi

  • Hapus tabel sementara secara eksplisit ketika tidak lagi diperlukan menggunakan DROP TEMPORARY TABLE
  • Pada koneksi yang berjalan lama (misalnya, pekerjaan batch), hapus tabel sementara secara berkala
Contoh: Hapus tabel sementara secara eksplisit
DROP TEMPORARY TABLE IF EXISTS temp_users;

Poin penting

  • Menambahkan IF EXISTS mencegah kesalahan jika tabel tidak ada.

6-2. Precaution 2: Hindari Konflik Nama dengan Tabel Reguler

Masalah

Anda dapat membuat tabel sementara dengan nama yang sama dengan tabel reguler. Namun, ketika Anda melakukannya, tabel reguler menjadi sementara tidak terlihat.

Contoh masalah

-- 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;

Selama tabel sementara ada, tabel reguler dengan nama yang sama tersembunyi, yang dapat menyebabkan kesalahan pengambilan data yang tidak terduga.

Solusi

  • Gunakan awalan seperti “temp_” untuk nama tabel sementara
  • Adopsi konvensi penamaan yang jelas untuk membedakan tabel sementara dan reguler
Contoh: Pembuatan tabel sementara yang aman
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

Manfaat

  • Menggunakan awalan temp_ mencegah konflik dengan tabel reguler users.
  • Memudahkan membedakan tabel dalam kode aplikasi.

6-3. Precaution 3: Indeks dan Kendala Tidak Secara Otomatis Diwariskan

Masalah

Jika Anda membuat tabel menggunakan CREATE TEMPORARY TABLE ... AS SELECT ..., indeks dan kendala dari tabel asli tidak diwariskan, yang dapat menurunkan kinerja.

Contoh masalah

-- 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;

Dalam kasus ini, kendala PRIMARY KEY dan UNIQUE tidak dibawa ke temp_users, yang dapat memperlambat pencarian dan memungkinkan data duplikat.

Solusi

  • Tambahkan indeks secara eksplisit setelah membuat tabel sementara
  • Jika mendefinisikan kolom secara manual dengan CREATE TEMPORARY TABLE, tentukan indeks saat pembuatan
Contoh: Tambahkan indeks secara manual
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);

Pendekatan ini memungkinkan Anda membuat tabel sementara dengan indeks yang mirip dengan tabel asli.

Ringkasan

Pada bagian ini, kami menjelaskan tiga tindakan pencegahan penting untuk menggunakan tabel sementara dengan aman.

✔ Ringkasan cepat

  1. Jangan terlalu bergantung pada penghapusan otomatis
  • Hapus tabel sementara secara eksplisit menggunakan DROP TEMPORARY TABLE
  • Hapus secara berkala dalam sesi yang berjalan lama
  1. Hindari konflik nama dengan tabel reguler
  • Jika tabel reguler dengan nama yang sama ada, tabel sementara memiliki prioritas
  • Gunakan awalan seperti temp_ untuk membedakan secara jelas
  1. Indeks dan kendala tidak diwariskan secara otomatis
  • Dengan CREATE TEMPORARY TABLE ... AS SELECT ..., indeks hilang
  • Tambahkan indeks secara manual setelah pembuatan

Dengan mengingat poin-poin ini, Anda dapat memanfaatkan tabel sementara MySQL dengan aman sambil meningkatkan kinerja basis data.

7. 10 Pertanyaan yang Sering Diajukan (FAQ) tentang Tabel Sementara MySQL

Pendahuluan

Pada bagian ini, kami menjawab 10 pertanyaan yang sering diajukan tentang tabel sementara MySQL.
Kami membahas cara kerjanya, keterbatasannya, pertimbangan kinerja, dan pemecahan masalah dalam skenario praktis.

7-1. Pertanyaan tentang Spesifikasi Dasar

Q1. Apakah tabel sementara dapat diakses dari sesi lain?

A. Tidak, tidak dapat.
Tabel sementara hanya berlaku dalam sesi yang membuatnya dan tidak dapat diakses dari sesi lain.

-- 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;

Error:

ERROR 1146 (42S02): Table 'temp_users' doesn't exist

Jika Anda perlu berbagi data antar sesi, Anda harus menggunakan tabel biasa.

Q2. Apakah tabel sementara disimpan di disk?

A. Mereka biasanya disimpan di memori, tetapi dapat dipindahkan ke disk dalam kondisi tertentu.
Jika ukuran tabel melebihi tmp_table_size atau max_heap_table_size, MySQL dapat membuat tabel sementara di disk menggunakan InnoDB atau MyISAM.

SHOW VARIABLES LIKE 'tmp_table_size';

Untuk meningkatkan kinerja, konfigurasikan tmp_table_size dengan tepat.

Q3. Bisakah saya membuat indeks pada tabel sementara?

A. Ya, Anda bisa.
Anda dapat mendefinisikan PRIMARY KEY atau INDEX seperti pada tabel biasa.

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);

Namun, jika Anda menggunakan CREATE TEMPORARY TABLE ... AS SELECT ..., indeks tidak diwariskan, sehingga Anda harus menambahkannya secara manual.

7-2. Pertanyaan tentang Kinerja dan Perilaku

Q4. Apakah ada perubahan pada tabel sementara di MySQL 8.0?

A. MySQL 8.0 memperkenalkan Common Table Expressions (CTE) menggunakan klausa WITH.
Mulai MySQL 8.0, Anda dapat memproses set hasil sementara menggunakan CTE tanpa harus secara eksplisit membuat tabel sementara.

WITH temp_users AS (
    SELECT id, name FROM users WHERE status = 'active'
)
SELECT * FROM temp_users;

Menggunakan CTE alih-alih tabel sementara dapat menyederhanakan kueri dan mengurangi penggunaan memori.

Q5. Apa perbedaan antara tabel sementara dan tabel MEMORY?

A. Tabel MEMORY bertahan melampaui sesi, sedangkan tabel sementara tidak.
Tabel sementara dihapus ketika sesi berakhir, sementara tabel MEMORY tetap ada hingga server di-restart (atau secara eksplisit di-drop).

CREATE TABLE memory_table (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MEMORY;

Kapan harus menggunakan yang mana?

  • Tabel sementara: Pemrosesan jangka pendek, berskala sesi
  • Tabel MEMORY: Akses berkecepatan tinggi dengan persistensi tingkat server

7-3. Pertanyaan tentang Penghapusan dan Pemecahan Masalah

Q6. Bisakah saya menghapus tabel sementara menggunakan DROP TABLE?

A. Tidak, Anda harus menggunakan DROP TEMPORARY TABLE.
Selalu gunakan DROP TEMPORARY TABLE saat menghapus tabel sementara.

DROP TEMPORARY TABLE temp_users;

Menggunakan DROP TABLE biasa dapat menghasilkan error.

Q7. Mengapa SHOW TABLES tidak menampilkan tabel sementara?

A. Tabel sementara tidak terdaftar oleh SHOW TABLES.
Untuk memeriksa keberadaannya, lakukan query pada INFORMATION_SCHEMA.

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

Jika tidak ada hasil yang dikembalikan, tabel sementara mungkin sudah dihapus.

Ringkasan

Pada bagian ini, kami membahas 10 pertanyaan yang sering diajukan tentang tabel sementara MySQL.

✔ Ringkasan cepat

  1. Tabel sementara tidak dapat diakses dari sesi lain
  2. Tabel dibuat di memori tetapi dapat dipindahkan ke disk jika besar
  3. Indeks harus didefinisikan secara manual jika menggunakan AS SELECT
  4. CTE (WITH) tersedia di MySQL 8.0+
  5. Berbeda dengan tabel MEMORY, tabel sementara menghilang saat sesi berakhir
  6. Gunakan DROP TEMPORARY TABLE untuk menghapusnya
  7. SHOW TABLES tidak menampilkan tabel sementara

8. Ringkasan: Poin-Poin Kunci untuk Menggunakan Tabel Sementara MySQL Secara Efektif

Pendahuluan

Tabel sementara MySQL adalah alat yang kuat untuk menyimpan data menengah dan mengoptimalkan kinerja kueri.
Di sini, kami merangkum poin-poin kunci yang dibahas sepanjang panduan ini.

8-1. Konsep Dasar Tabel Sementara MySQL

Apa itu tabel sementara?

  • Ada secara independen per sesi
  • Dihapus secara otomatis ketika sesi berakhir
  • Mendukung INSERT, UPDATE, dan DELETE seperti tabel biasa

Sintaks pembuatan dasar

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

Kasus penggunaan utama

  • Penyimpanan data sementara
  • Optimisasi kinerja kueri
  • Tabel menengah untuk pemrosesan batch
  • Manajemen data sementara per pengguna

8-2. Keuntungan Tabel Sementara

1) Meningkatkan kinerja kueri

  • Mengurangi beban JOIN
  • Melakukan agregasi sebelumnya untuk mengurangi perhitungan berulang
  • Menyederhanakan kueri dengan mengecualikan data yang tidak diperlukan
Contoh: Mengurangi beban 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) Penyimpanan sementara dan manajemen berbasis sesi

  • Dihapus secara otomatis saat sesi berakhir
  • Ideal untuk penyimpanan data jangka pendek
  • Manipulasi data independen tanpa memengaruhi sesi lain
Contoh: Penyimpanan sementara hasil pencarian
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

SELECT * FROM temp_search_results;

3) Pembaruan data yang aman

  • Berguna sebagai tabel menengah dalam pemrosesan batch
  • Dapat berfungsi sebagai cadangan selama pembaruan data
  • Efektif untuk membuat dataset pengujian
Contoh: Pembaruan data yang aman
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. Kerugian dan Langkah Pencegahan

1) Data menghilang ketika sesi berakhir

  • Tidak cocok untuk penyimpanan permanen
  • Gunakan tabel biasa untuk penyimpanan jangka panjang

2) Tidak dapat dibagikan antar sesi

  • Tidak dapat diakses dari koneksi lain
  • Gunakan tabel biasa saat berbagi data antar pengguna

3) Indeks dan constraint tidak secara otomatis diwariskan

  • CREATE TEMPORARY TABLE ... AS SELECT ... tidak membuat indeks
  • Tambahkan indeks secara manual jika diperlukan
    ALTER TABLE temp_users ADD INDEX idx_email (email);
    

8-4. Praktik Terbaik untuk Penggunaan Aman

Hapus secara eksplisit ketika tidak lagi diperlukan

DROP TEMPORARY TABLE IF EXISTS temp_users;

Hindari konflik penamaan dengan tabel biasa

  • Gunakan awalan temp_
    CREATE TEMPORARY TABLE temp_users (...);
    

Rancang dengan mempertimbangkan kinerja

  • Jika tabel menjadi besar dan berpindah ke disk, pertimbangkan menyesuaikan tmp_table_size
    SHOW VARIABLES LIKE 'tmp_table_size';
    

8-5. Tabel Sementara vs Alternatif (Views dan CTEs)

Juga penting untuk mempertimbangkan kapan harus menggunakan tabel sementara dibandingkan views (VIEW) atau CTE (Common Table Expressions).

MethodCharacteristicsBest Use Case
Temporary tableRemoved at session endWhen you need to store intermediate data
View (VIEW)Data retrieved in real time; performance may degrade with large datasetsSave and reuse frequently referenced queries
CTE (WITH clause)Virtual table valid only within a single queryHandle temporary data without creating a table

Ringkasan

Dalam panduan ini, kami membahas semua aspek kunci dari tabel sementara MySQL.

✔ Ringkasan cepat

  • Tabel sementara secara otomatis dihapus ketika sesi berakhir
  • Mereka membantu mengoptimalkan kinerja dengan mengurangi beban JOIN dan agregasi
  • Berguna untuk pemrosesan batch, hasil pencarian sementara, dan data uji
  • Tidak dapat dibagikan antar sesi, dan indeks harus ditambahkan secara manual bila diperlukan
  • Memilih antara tabel sementara, view, dan CTE memungkinkan manajemen data yang fleksibel

Anda telah menyelesaikan semua bagian panduan tabel sementara MySQL! 🎉
Gunakan referensi ini untuk memanfaatkan tabel sementara secara efektif dalam proyek MySQL Anda.