If table exists drop table then create it, if it does not exist just create it
MySQL: Conditionally Drop and Create Tables

Learn how to safely drop a table if it exists, or simply create it if it doesn't, using robust SQL commands in MySQL.
When managing database schemas, a common requirement is to ensure a table exists in a specific state. This often involves either creating a new table or, if it already exists, dropping it first and then recreating it. This article explores the SQL commands and best practices for achieving this conditional table management in MySQL, ensuring your schema operations are both safe and idempotent.
The DROP TABLE IF EXISTS
Statement
The DROP TABLE IF EXISTS
statement is a crucial command for safely removing tables. The IF EXISTS
clause prevents an error from being thrown if the table you're trying to drop does not actually exist. This makes your scripts more robust and less prone to failure in varying database states. After ensuring the table is removed (or confirmed not to exist), you can then proceed with your CREATE TABLE
statement.
DROP TABLE IF EXISTS my_new_table;
CREATE TABLE my_new_table (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Example of dropping a table if it exists, then creating it.
DROP TABLE
. This operation permanently deletes all data within the table. Always back up your database before executing DROP TABLE
on production systems.The CREATE TABLE IF NOT EXISTS
Statement
Alternatively, if your goal is simply to ensure a table exists without necessarily recreating it every time, the CREATE TABLE IF NOT EXISTS
statement is more appropriate. This command will create the table only if a table with the specified name does not already exist. If it does exist, MySQL will simply do nothing and no error will be generated. This is useful for idempotent scripts that set up initial database structures.
CREATE TABLE IF NOT EXISTS my_existing_table (
id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2)
);
Example of creating a table only if it does not already exist.
flowchart TD A[Start] A --> B{Table 'my_table' exists?} B -- Yes --> C[DROP TABLE IF EXISTS my_table] C --> D[CREATE TABLE my_table] B -- No --> D[CREATE TABLE my_table] D --> E[End]
Flowchart illustrating the 'drop if exists then create' logic.
Choosing the Right Approach
The choice between DROP TABLE IF EXISTS
followed by CREATE TABLE
and CREATE TABLE IF NOT EXISTS
depends on your specific use case:
- Drop then Create: Use this when you want to ensure the table is always in a pristine, newly defined state, effectively resetting its structure and data. This is common in development environments, testing setups, or when deploying schema changes that require a full refresh.
- Create If Not Exists: Use this when you want to ensure the table exists but preserve any existing data and structure if it's already there. This is ideal for initial setup scripts that should not interfere with an already existing database, or for adding new tables to an existing schema without affecting others.
ALTER TABLE
statements.