MySQL INFORMATION_SCHEMA
baza danych na ratunek:
-- 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;
Więcej informacji:
- Podręcznik MySQL Reference:Rozdział 19. Tabele INFORMATION_SCHEMA
- Podręcznik MySQL Reference:Tabela INFORMATION_SCHEMA TABLES
- Podręcznik MySQL Reference:Tabela INFORMATION_SCHEMA COLUMNS
AKTUALIZACJA:
Inną opcją, być może łatwiejszą, jest usunięcie istniejącej tabeli i ponowne jej utworzenie z nowym schematem. Aby to zrobić, potrzebujesz:
- Utwórz tabelę tymczasową, dokładną kopię istniejącej tabeli
- Wypełnij tymczasową tabelę danymi ze starej tabeli
- Upuść stary stół
- Utwórz nową tabelę z nowym schematem
- Wypełnij nową tabelę informacjami z tabeli tymczasowej
- Upuść tabelę tymczasową.
Tak więc w kodzie 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;
Właściwie ostatni krok, „Upuść tabelę tymczasową.”, możesz na chwilę pominąć. Na wszelki wypadek chciałbyś mieć jakąś kopię zapasową starej tabeli „na wszelki wypadek”.
Więcej informacji:
- Podręcznik MySQL Reference:Składnia CREATE TABLE
- Podręcznik MySQL Reference:INSERT Składnia
- Podręcznik MySQL Reference:INSERT ... SELECT Składnia