MySQL Empty Database / Delete or Drop All Tables

by Vivek Gite on May 1, 2007 · 25 comments

Q. How do I empty MySQL database? What SQL command needs to be executed in order to delete all (100s) of tables in MySQL database called atomstore?

A. You need to use DROP DATABASE sql command to drops all tables in the database/empty database and deletes the database. Be very careful with this statement! To use DROP DATABASE, you need the DROP privilege on the database

MySQL drop all tables syntax:

DROP DATABASE {mysql-database-name}

Method #1: Empty database with root user

In order to use this procedure you must have the drop and create database privilege (otherwise you will drop database but not able to create it again). Login as MySQL root or admin user to drop atomstore database:
$ mysql -u root -p
Now drop database:
mysql> DROP DATABASE atomstore;
Now create database again:
mysql> CREATE DATABASE atomstore;
Exit and close the session:
mysql> quit

Method #2: Drop all tables using shell script w/o root access

I've small handy shell script that removes all tables without dropping and creating MySQL database again.

#!/bin/bash
MUSER="$1"
MPASS="$2"
MDB="$3"
 
# Detect paths
MYSQL=$(which mysql)
AWK=$(which awk)
GREP=$(which grep)
 
if [ $# -ne 3 ]
then
	echo "Usage: $0 {MySQL-User-Name} {MySQL-User-Password} {MySQL-Database-Name}"
	echo "Drops all tables from a MySQL"
	exit 1
fi
 
TABLES=$($MYSQL -u $MUSER -p$MPASS $MDB -e 'show tables' | $AWK '{ print $1}' | $GREP -v '^Tables' )
 
for t in $TABLES
do
	echo "Deleting $t table from $MDB database..."
	$MYSQL -u $MUSER -p$MPASS $MDB -e "drop table $t"
done

Simply use above script as follows to empty a database called quiz with username tom and password jerry:
$ ./drop.table.sh tom jerry quiz

Download MySQL empty database drop script

You can download complete script with error checking below:

Featured Articles:

Share this with other sys admins!
Facebook it - Tweet it - Print it -

{ 25 comments… read them below or add one }

1 Jon March 11, 2008

Alternative methods:

In PHPMyAdmin, you can check all tables and then choose with selected: drop.

If you are doing it with scripting, You can use SHOW TABLES to list the tables, and use this to generate a query DROP TABLE [tablename],[tablename]…

Reply

2 romina May 16, 2008

You can have the drop privilege, but not the create database one!!

BE CAREFUL WHEN DOING THIS! You might end up with no DB at all.

Please don’t suggest this kind of procedures without explaining the whole nine yards.

Reply

3 Colin July 1, 2008

Unfortunately this is no use if you don’t have permissions for create database (like the situation i am currently in).

Reply

4 google pagerank August 29, 2008

Really informative post..thanks..:)

Reply

5 Mas February 2, 2009

Great post and you do not need create database privileges for this. The method is only dropping the tables and not the database. The user should have create tables under the database..

Thanks

Reply

6 OnkelBeh March 11, 2009

What about :
mysqldump -u[user] -p[ssht...] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[user] -p[sshht...] [DATABASE]

Reply

7 ddb May 14, 2009

You can use also:
mysql> use database;
mysql> truncate tablename;
to empty a table!

Reply

8 Lon F. Binder September 22, 2009

A little longer, but also a little more efficient because it does the drop (of all tables) in one shot:


mysql --user=YOUR_USERNAME --password=YOUR_PASSWORD -BNe "show tables" YOUR_DBSCHEMA_NAME | tr '\n' ',' | sed -e 's/,$//' | awk '{print "SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS " $1 ";SET FOREIGN_KEY_CHECKS = 1;"}' | mysql --user=YOUR_USERNAME --password=YOUR_PASSWORD YOUR_DBSCHEMA_NAME

Reply

9 Russell July 21, 2010

This worked perfecly. Save me the monotony of deleting 300+ tables from a Magento Install

Reply

10 Manasi April 19, 2011

this was very useful….works great ! thanks !

Reply

11 Harshit December 15, 2009

I agree with Romina

I followed it and ended with completely deleting the database and not just the tables!! Your post title is absolutely incorrect. Please change it..

EVERYONE BE CAREFUL WHILE DOING THIS

Reply

12 Angie May 14, 2010

I want to erase everything that has been looked up on google and everything that has already been looked up like a restart how can i reboot?

Reply

13 ANgie May 14, 2010

I have an apple laptop i was the person earlier

Reply

14 Clemens May 20, 2010

I like this even more.

echo “select concat(‘drop table ‘, table_name, ‘;’) from information_schema.tables where table_schema=schema()” | mysql CONNECT | grep “^drop table ” | mysql CONNECT

Make sure you connect to the right schema :p

Reply

15 Anonymous May 31, 2010

You should disable FOREIGN_KEY_CHECKS. I like Lon F. Binder solution.

Reply

16 Jack July 15, 2010

How can i change this script so that it erases the rows from some defined tables?

Reply

17 Shweta September 6, 2010

thanks for the valuable information :)

Reply

18 herik October 18, 2010

Thank’s A lot. For method#2 : it works!

Reply

19 Ashok yadav October 31, 2010

To empty the database in MySql just go to the database and select the all tables (checkbox on of all tables) then select the “empty” action just down from the table names, then click “GO” button just right side of action selected .

Reply

20 Sutharsan January 19, 2011

Call me paranoid, but I don’t like to put my database password in scripts. So I replaced the definition of MPASS with

read -s -p "Your database password: " MPASS

Reply

21 Thiyagarajan Veluchamy February 11, 2011

Thanks for nice ppost

Reply

22 Sonet June 1, 2011

Had to put the table name in quotes in the for loop:

$MYSQL -u $MUSER -p$MPASS $MDB -e “drop table \`$t\`”

Reply

23 Frank November 14, 2011

Yep, me too. Wish I had read this far down the comments lol

Reply

24 JP Lew October 22, 2011

thanks, exactly what I was looking for. I used this to replace my Wordpress database.

Reply

25 risdiyanto January 28, 2012

is it possible to use simple truncate on database?

Reply

Leave a Comment

You can use these HTML tags and attributes for your code and commands: <strong> <em> <ol> <li> <u> <ul> <blockquote> <pre> <a href="" title="">
What is 15 + 10 ?
Please leave these two fields as-is:
Solve the simple math so we know that you are a human and not a bot.




Previous post:

Next post: