How to Check if Table Exists in MySQL
- What Is a Table in MySQL
- Use the Information Schema to Check if Table Exists in MySQL
- Use the
SHOW TABLESCommand to Check if Table Exists in MySQL - Use the
table_exists()Procedure to Check if Table Exists in MySQL
This article offers several options to check table existence in MySQL. Before discussing it, let’s first see what a table is in MySQL and when we need to check its existence.
What Is a Table in MySQL
Tables are database objects that hold all of a database’s information. Tables are similar to spreadsheets in that data is logically structured in a row-and-column manner.
Each column shows a field in the record, and each row represents a distinct record. We can create a table in MySQL by simply calling the create statement.
CREATE TABLE table_name (table_id INT); We can execute a drop statement to permanently delete a table.
DROP TABLE table_name; Sometimes when we want to deploy a table to a database, we need to confirm that table has a unique name because otherwise, the CREATE TABLE statement will error.
In another case, if we drop a table that doesn’t exist, we will get an error again. The solution is simple; we need to check if a table exists and perform the operation we want.
Use the Information Schema to Check if Table Exists in MySQL
One way to check a table existence is to query the INFORMATION_SCHEMA.TABLES view. For this, we can get the count of tables that have the same name as our table from the INFORMATION_SCHEMA.TABLES.
CREATE TABLE table_name (table_id INT); SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = 'table_name'; Output:
+----------+ | count(*) | +----------+ | 1 | +----------+ If we get zero, then there is no such table in our database, and if we get a non-zero number, then the table exists. You can check TABLE_SCHEMA = 'database_name' in the WHERE statement if you have several databases.
If you don’t know the database, you can query it with SELECT DATABASE(). A revised version of the code above with the database is below.
CREATE TABLE EMPLOYEE (table_id INT); SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = 'EMPLOYEE' AND TABLE_SCHEMA in (SELECT DATABASE()); Output:
+----------+ | count(*) | +----------+ | 1 | +----------+ Use the SHOW TABLES Command to Check if Table Exists in MySQL
The second way and pretty easy one is to use SHOW TABLES. Let’s create a table sampletable in the database and check if it exists.
CREATE TABLE sampletable (myId INT); SHOW TABLES LIKE 'sampletable'; Output:
Tables_in_db_3xs4qrcrf (sampletable) sampletable If there is not any table, you will probably get zero rows. You need to know that this method doesn’t work on a temporary table.
A temporary table in MySQL is a particular sort of table that lets you save a temporary result set that you may reuse several times in a single session.
When querying data that needs a single SELECT statement with the JOIN clauses is difficult or costly, a temporary table is useful.
You may save the instant result in a temporary table and process it with another query in this scenario. We will discuss the method that works on the temporary table in the next method.
Use the table_exists() Procedure to Check if Table Exists in MySQL
After MySQL 5.7 new way was added to determine if a table or a view exists, including temporary tables. Before talking about this procedure, we first need to grasp the procedure.
A procedure is a database-stored subroutine (similar to a subprogram) in a conventional scripting language. Procedures are written in MySQL and saved in the MySQL database/server in the case of MySQL.
A MySQL process has three parts: a name, a list of parameters, and a SQL query(s). Now we can continue on our specific procedure, table_exists.
According to the MySQL documentation: “The procedure returns the table type in an OUT parameter. If both a temporary and a permanent table exist with the given name, TEMPORARY is returned”.
Let’s check it.
CREATE TABLE mytable (id INT PRIMARY KEY); CALL sys.table_exists('mydatabase', 'mytable', @exists); SELECT @exists; Output:
+------------+ | @exists | +------------+ | BASE TABLE | +------------+ 1 row in set (0.00 sec) If there’s no such table in the database, you will get an empty result.
+---------+ | @exists | +---------+ | | +---------+ 1 row in set (0.00 sec) Subhan is a professional back-end developer as well as mobile developer. He is also open-source contributor by writing articles.
LinkedIn