MySQL INFORMATION_SCHEMA
base de datos al rescate:
-- 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;
Más información:
- Manual de referencia de MySQL:Capítulo 19. INFORMACIÓN_ESQUEMA Tablas
- Manual de referencia de MySQL:La tabla INFORMATION_SCHEMA TABLES
- Manual de referencia de MySQL:La tabla INFORMACION_ESQUEMA COLUMNAS
ACTUALIZACIÓN:
Otra opción, posiblemente más fácil, es descartar la tabla existente y volver a crearla con el nuevo esquema. Para hacer esto, necesita:
- Crear una tabla temporal, una copia exacta de la tabla existente
- Rellene la tabla temporal con los datos de la tabla anterior
- Deja la mesa vieja
- Cree la nueva tabla con el nuevo esquema
- Rellene la nueva tabla con la información de la tabla temporal
- Eliminar tabla temporal.
Entonces, en código SQL:
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;
En realidad, el último paso, "Eliminar tabla temporal", puede omitirlo por un tiempo. Por si acaso, le gustaría tener algún tipo de copia de seguridad de la tabla anterior, "por si acaso".
Más información:
- Manual de referencia de MySQL:Sintaxis CREATE TABLE
- Manual de referencia de MySQL:INSERT Syntax
- Manual de referencia de MySQL:INSERT ... SELECT Sintaxis