SQLite - Drop a Table
To drop a table in SQLite, use the DROP TABLE
statement.
Running this statement removes the table from the database. It is completely removed from the database schema and the disk file. Therefore the table can not be recovered. All indices and triggers associated with the table are also deleted.
A Basic DROP TABLE
Statement
First, let's review the tables in our database:
sqlite> .tables Albums Albums1 Albums2 Artists
We have a couple of spare tables from our previous exercises, so let's drop one.
The following code deletes the Albums1 table:
After running that code, we can review our tables again:
sqlite> .tables Albums Albums2 Artists
The table has been removed.
Check if the Table Exists
You can use the IF EXISTS
clause to check if the table exists before SQLite tries to drop it.
Doing this prevents any errors that would normally be generated if the table doesn't exist.
First, let's try to drop a non-existent table without using the IF EXISTS
clause. Let's try to drop the one we just dropped:
This results in the following:
sqlite> DROP TABLE Album1; Error: no such table: Album1
OK, so let's try it again, but this time with the IF EXISTS
clause:
Result:
sqlite> DROP TABLE IF EXISTS Album1; sqlite>
So nothing happened. Importantly, no error was thrown.
Drop a Table with Primary Keys
So what happens if we try to drop a table that contains primary keys, and there are foreign keys referencing them?
Let's try it:
Result:
sqlite> DROP TABLE Artists; Error: FOREIGN KEY constraint failed
As expected, it failed. So if you need to drop a table, you will need to drop any associated tables first.
SQLite actually tries to delete the data before it drops a table. It is this delete action that causes any foreign key constraint checks to take place.
SQLite also drops any indices or triggers associated with the table before it performs the delete (and subsequent drop) operation.