MySQL INFORMATION_SCHEMA
database to the rescue:
-- First check if the table exists
IF EXISTS(SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema="db_name"
AND table_name LIKE 'wild')
-- If exists, retreive columns information from that table
THEN
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name="tbl_name"
AND table_schema="db_name";
-- do some action, i.e. ALTER TABLE if some columns are missing
ALTER TABLE ...
-- Table does not exist, create a new table
ELSE
CREATE TABLE ....
END IF;
More information:
- MySQL Reference Manual: Chapter 19. INFORMATION_SCHEMA Tables
- MySQL Reference Manual: The INFORMATION_SCHEMA TABLES Table
- MySQL Reference Manual: The INFORMATION_SCHEMA COLUMNS Table
UPDATE:
Another option, possibly easier, is to drop the existing table and re-create it again with the new schema. To do this, you need:
- Create temporary table, an exact copy of the existing table
- Populate the temporary table with the data from the old table
- Drop the old table
- Create the new table with new schema
- Populate the new table with the information from the temporary table
- Drop temporary table.
So, in SQL code:
CREATE TABLE old_table_copy LIKE old_table;
INSERT INTO old_table_copy
SELECT * FROM old_table;
DROP TABLE old_table;
CREATE TABLE new_table (...new values...);
INSERT INTO new_table ([... column names from old table ...])
SELECT [...column names from old table ...]
FROM old_table_copy;
DROP TABLE old_table_copy;
Actually the last step, “Drop temporary table.”, you could skip for a while. Just in case, you would want to have some sort of backup of the old table, “just-in-case”.
More information:
- MySQL Reference Manual: CREATE TABLE Syntax
- MySQL Reference Manual: INSERT Syntax
- MySQL Reference Manual: INSERT … SELECT Syntax