MySQL - Temporary Tables



What are Temporary Tables?

The Temporary Tables are the tables that are created in a database to store data temporarily. These tables will be automatically deleted once the current client session is terminated or ends. In addition to that, these tables can be deleted explicitly if the users decide to drop them manually. You can perform various SQL operations on temporary tables, just like you would with permanent tables, including CREATE, UPDATE, DELETE, INSERT, JOIN, etc.

Temporary tables were introduced in MySQL version 3.23. If you're using an older version of MySQL that's older than 3.23, you won't be able to use temporary tables, instead you can use the Heap Tables.

As stated earlier, temporary tables will only last as long as the session is alive. If you run the code in a PHP script, the temporary table will be destroyed automatically when the script finishes executing. If you are connected to the MySQL database server through the MySQL client program, then the temporary table will exist until you close the client or manually destroy the table.

Creating Temporary Tables in MySQL

Creating a temporary table in MySQL is very similar to creating a regular database table. But, instead of using CREATE TABLE, we use CREATE TEMPORARY TABLE statement.

Syntax

Following is the syntax to create a temporary table in MySQL −

CREATE TEMPORARY TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

Example

First of all, let us create a temporary table named CUSTOMERS using the below query −

CREATE TEMPORARY TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

Similar to normal tables, we can insert records into a temporary table using the INSERT statement. Here, we are inserting three records into the above created temporary table −

INSERT INTO CUSTOMERS VALUES
   (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
   (2, 'Khilan', 25, 'Delhi', 1500.00 ),
   (3, 'kaushik', 23, 'Kota', 2000.00 );

Execute the following query to display all the records of the temporary table CUSTOMERS.

SELECT * FROM CUSTOMERS;

Following are the records of CUSTOMERS table −

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00

When we issue a SHOW TABLES command, our temporary table won't be displayed in the list of tables. To verify if the temporary table exists, we need to use the SELECT statement to retrieve its data. Temporary tables will be deleted when we ends our session, so if we log out of MySQL and then try to issue the SELECT command, we won't find the temporary table in the database.

Dropping Temporary Tables in MySQL

Though MySQL automatically removes temporary tables when your database connection ends, we can still delete them ourselves by using the DROP TEMPORARY TABLE command if we want to.

Syntax

Following is the syntax for dropping a temporary table in MySQL −

DROP TEMPORARY TABLE table_name;

Example

In the following query, we are dropping the temporary table CUSTOMERS that was created in the previous example −

DROP TEMPORARY TABLE CUSTOMERS;

Output

Executing the query above will produce the following output −

Query OK, 0 rows affected (0.00 sec)

Verification

Now, let us verify the temporary table CUSTOMERS by retrieving it's records using the following query −

SELECT * FROM CUSTOMERS;

Since we removed the the temporary table CUSTOMERS, it will generate an error saying the table does not exist.

ERROR 1146: Table 'TUTORIALS.CUSTOMERS' doesn't exist

Creating Temporary table Using a Client Program

In addition to create a temporary table in MySQL Database using the MySQL query, we can also perform the "TEMPORARY TABLE" operation on a table using a client program.

Syntax

Following are the syntaxes to create a temporary table into MySQL Database in various programming languages −

To create a temporary table into MySQL database through a PHP program, we need to execute the Create Temporary Table statement using the mysqli function query() as −

$sql="CREATE temporary Table table_name(column_name, column_type, ...)";
$mysqli->query($sql);

To create a temporary table into MySQL database through a Node.js program, we need to execute the Create Temporary Table statement using the query() function of the mysql2 library as −

sql="CREATE temporary Table table_name(column_name, column_type, ...)";
con.query(sql);

To create a temporary table into MySQL database through a Java program, we need to execute the Create Temporary Table statement using the JDBC function executeUpdate() as −

String sql="CREATE temporary Table table_name(column_name, column_type, ...)";
statement.executeQuery(sql);

To create a temporary table into MySQL database through a Python program, we need to execute the Create Temporary Table statement using the execute() function of the MySQL Connector/Python as −

sql="CREATE temporary Table table_name(column_name, column_type, ...)";
cursorObj.execute(sql);

Example

Following are the programs −

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // printf('Connected successfully.
'); $sql = "CREATE TEMPORARY TABLE SalesSummary (" . " product_name VARCHAR(50) NOT NULL, " . " total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, " . " avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, " . " total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 )"; if ($mysqli->query($sql)) { printf("temporary table created successfully.
"); } if ($mysqli->errno) { printf("temporary table could not be created: %s
", $mysqli->error); } $mysqli->close();

Output

The output obtained is as follows −

temporary table created successfully.
var mysql = require('mysql2');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "Nr5a0204@123"
 });

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");

  //Creating a Database
  sql = "CREATE DATABASE testdb"
  con.query(sql);

  //Selecting a Database
  sql = "USE testdb"
  con.query(sql);

  //Creating table
  sql = "CREATE TEMPORARY TABLE SalesSummary (product_name VARCHAR(50) NOT NULL, total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, total_units_sold INT UNSIGNED NOT NULL DEFAULT 0);"
  con.query(sql);

  sql = "INSERT INTO SalesSummary(product_name, total_sales, avg_unit_price, total_units_sold)VALUES('cucumber', 100.25, 90, 2);"
  con.query(sql);

  sql = "SELECT * FROM SalesSummary;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log("**SalesSummary Table:**")
    console.log(result);
  });
});

Output

The output produced is as follows −

Connected!
--------------------------
**SalesSummary Table:**
[
  {
    product_name: 'cucumber',
    total_sales: '100.25',
    avg_unit_price: '90.00',
    total_units_sold: 2
  }
]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class TemporaryTable {
    public static void main(String[] args){
        String url = "jdbc:mysql://localhost:3306/TUTORIALS";
        String username = "root";
        String password = "password";
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, username, password);
            Statement statement = connection.createStatement();
            System.out.println("Connected successfully...!");

            //Create temporary table...!
            String sql = "CREATE TEMPORARY TABLE SalesSummary (product_name VARCHAR(50) NOT NULL, total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00, avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00, total_units_sold INT UNSIGNED NOT NULL DEFAULT 0 )";
            statement.executeUpdate(sql);
            System.out.println("Temporary table created successfully...!");

            ResultSet resultSet = statement.executeQuery("DESCRIBE SalesSummary");
            while(resultSet.next()) {
                System.out.print(resultSet.getNString(1));
                System.out.println();
            }
            connection.close();
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}

Output

The output obtained is as shown below −

Connected successfully...!
Temporary table created successfully...!
product_name
total_sales
avg_unit_price
total_units_sold
import mysql.connector
#establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
table_name = 'tutorials_tbl_temp'
#Creating a cursor object 
cursorObj = connection.cursor()
create_table_query = f"CREATE TEMPORARY TABLE {table_name} (NAME VARCHAR(50), ID INT)"
cursorObj.execute(create_table_query)
print(f"Temporary table '{table_name}' is created successfully.")
cursorObj.close()
connection.close()

Output

Following is the output of the above code −

Temporary table 'tutorials_tbl_temp' is created successfully.
Advertisements