Tutorial Belajar MySQL: Cara Membuat Temporary Table MySQL

Kali ini kita akan membahas salah satu fitur yang disediakan MySQL (dan juga beberapa RDBMS lain seperti SQL Server atau Oracle), yakni tentang temporary table. Kita akan membahas pengertian, fungsi dan cara pembuatan temporary table MySQL.


Pengertian Temporary Table

Sesuai dengan namanya, temporary table digunakan untuk membuat tabel sementara di dalam MySQL. Tabel ini hanya ada untuk sementara waktu, atau tepatnya hanya untuk 1 session MySQL saja. Setelah itu tabel ini secara otomatis akan dihapus. Temporary tabel tidak akan ditampilkan walaupun kita menjalankan query SHOW TABLES.

Jika query pembuatan temporary table dibuat menggunakan PHP, maka tabel tersebut hanya hadir pada saat PHP diproses, setelah itu tabel akan otomatis dihapus. Yang berarti tabel hanya dibuat pada saat loading, dan akan hilang saat halaman web ditampilkan.


Fungsi dari Temporary Table

Biasanya temporary table berfungsi sebagai tabel penampung sementara. Misalkan kita ingin menghitung total barang sebelum memasukkannya ke dalam tabel aslinya. Atau kita perlu melakukan operasi yang melibatkan MySQL, namun tidak untuk disimpan.


Cara Membuat Temporary Table

Query atau perintah yang dibutuhkan untuk membuat temporary table pada dasarnya sama seperti tabel biasa. Kita tinggal menambahkan perintah TEMPORARY setelah query CREATE, seperti contoh berikut:

CREATE TEMPORARY TABLE daftar_dosen_temp
(NIP CHAR(10), nama_dosen VARCHAR(50));

Query diatas akan membuat sebuah tabel temporary dengan nama daftar_dosen_temp.

Agar lebih mudah dipahami, langsung saja kita praktek cara pembuatannya. Silahkan jalankan MySQL server, dan akses sebuah database:

D:\MySQL 5.6\bin>mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.22 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2014, Oracle and/or its affiliates. 
All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input 
statement.
 
mysql> USE mahasiswa;
Database changed
mysql> SHOW tables;
+---------------------+
| Tables_in_mahasiswa |
+---------------------+
| belajar_date        |
| daftar_dosen        |
| mata_kuliah         |
+---------------------+
3 rows in set (0.00 sec)

Dalam contoh diatas, saya menggunakan database mahasiswa yang memang sudah tersedia. Di dalam tabel ini terdapat 3 buah tabel. Yang juga perlu diperhatikan adalah saya mendapat ID atau session 1, ini terlihat dari keterangan pada baris ke-3, yakni penjelasan: "Your MySQL connection id is 1". Session ID ini akan berguna karena nantinya saya akan mencoba mengakses temporary table dari user lain.

Kembali ke MySQL client, saya akan membuat tabel daftar_dosen_temp:

mysql> CREATE TEMPORARY TABLE daftar_dosen_temp 
(NIP CHAR(10), nama_dosen VARCHAR(50));
Query OK, 0 rows affected (0.06 sec)
 
mysql> SHOW TABLES;
+---------------------+
| Tables_in_mahasiswa |
+---------------------+
| belajar_date        |
| daftar_dosen        |
| mata_kuliah         |
+---------------------+
3 rows in set (0.00 sec)

Setelah query pembuatan tabel, saya kembali memeriksa isi tabel dalam database mahasiswa. Hasilnya? Tabel daftar_dosen_temp tidak kelihatan! Ini merupakan salah satu ciri dari temporary table, dimana kita tidak bisa melihatnya menggunakan query SHOW TABLES.

Untuk membuktikan bahwa tabel ini benar-benar ada, mari kita input beberapa data dan melihat hasilnya:

mysql> SELECT * FROM daftar_dosen_temp;
Empty set (0.00 sec)
 
mysql> INSERT INTO daftar_dosen_temp VALUES ('0576431001','M. Siddiq');
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO daftar_dosen_temp VALUES ('0770435006','Rubin Hadi');
Query OK, 1 row affected (0.05 sec)
 
mysql> SELECT * FROM daftar_dosen_temp;
+------------+------------+
| NIP        | nama_dosen |
+------------+------------+
| 0576431001 | M. Siddiq  |
| 0770435006 | Rubin Hadi |
+------------+------------+
2 rows in set (0.00 sec)

Yup, tabel daftar_dosen_temp sukses diisi data dan ditampilkan.

Namun apakah user/ pengguna lain bisa melihat tabel ini? mari kita lanjut ke percobaan kedua.

Kali ini saya akan membuka MySQL client kedua (tanpa menutup jendela cmd pertama). Ini sebagai simulasi user kedua sedang login ke MySQL:

Dua session MySQL pada saat yang bersamaan

D:\MySQL 5.6\bin>mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.22 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2014, Oracle and/or its affiliates. 
All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current 
input statement.
 
mysql> USE mahasiswa;
Database changed
mysql> SHOW tables;
+---------------------+
| Tables_in_mahasiswa |
+---------------------+
| belajar_date        |
| daftar_dosen        |
| mata_kuliah         |
+---------------------+
3 rows in set (0.00 sec)

Perhatikan di baris ketiga, ID atau session untuk user ini adalah '2' : "Your MySQL connection id is 2". Kemudian saya masuk ke database mahasiswa, dan tidak menemukan tabel daftar_dosen_temp. Bagaimana jika kita coba akses langsung?

mysql> SELECT * FROM daftar_dosen_temp;
ERROR 1146 (42S02): Table 'mahasiswa.daftar_dosen_temp' doesn't exist

Seperti yang terlihat, user ke-2 tidak bisa melihat tabel daftar_dosen_temp. Lebih jauh lagi, bagaimana jika saya membuat kembali tabel daftar_dosen_temp menggunakan user ini? Berikut percobaannya:

mysql> CREATE TEMPORARY TABLE daftar_dosen_temp 
(NIP CHAR(10), nama_dosen VARCHAR(50));
Query OK, 0 rows affected (0.01 sec)
 
mysql> SHOW tables;
+---------------------+
| Tables_in_mahasiswa |
+---------------------+
| belajar_date        |
| daftar_dosen        |
| mata_kuliah         |
+---------------------+
3 rows in set (0.00 sec)
 
mysql> INSERT INTO daftar_dosen_temp VALUES ('0869437003','Arif Mustalifah');
Query OK, 1 row affected (0.04 sec)
 
mysql> INSERT INTO daftar_dosen_temp VALUES ('1080432007','Arif Budiman');
Query OK, 1 row affected (0.10 sec)
 
mysql> SELECT * FROM daftar_dosen_temp;
+------------+-----------------+
| NIP        | nama_dosen      |
+------------+-----------------+
| 0869437003 | Arif Mustalifah |
| 1080432007 | Arif Budiman    |
+------------+-----------------+
2 rows in set (0.00 sec)

Dari contoh ini kita bisa melihat fitur penting dari temporary table, yakni hanya tersedia, dan hanya bisa diakses oleh 1 session saja.


Jika dibawa ke tingkat aplikasi seperti di PHP, setiap user yang mengakses halaman akan menggunakan session MySQL yang berbeda (kecuali anda mengubah pengaturan setting PHP). Dengan demikian setiap user akan memiliki tabel temporary yang sama dan tidak akan saling 'bentrok'.

Fitur temporary table ini memang tidak akan terlalu sering anda gunakan, kecuali program yang dibuat memang cukup kompleks.

2 Comments

  1. dsuka
    05 Sep 15
    • Andre
      06 Sep 15

Add Comment

Leave a Reply to dsuka Cancel reply