MySQL INFORMATION_SCHEMA
救助するデータベース:
-- 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;
詳細情報:
- MySQLリファレンスマニュアル:第19章。INFORMATION_SCHEMAテーブル
- MySQLリファレンスマニュアル:INFORMATION_SCHEMATABLESテーブル
- MySQLリファレンスマニュアル:INFORMATION_SCHEMACOLUMNSテーブル
更新:
もう1つのオプションは、おそらく簡単ですが、既存のテーブルを削除して、新しいスキーマで再作成することです。これを行うには、次のものが必要です。
- 既存のテーブルの正確なコピーである一時テーブルを作成します
- 一時テーブルに古いテーブルのデータを入力します
- 古いテーブルを削除する
- 新しいスキーマで新しいテーブルを作成する
- 新しいテーブルに一時テーブルの情報を入力します
- 一時テーブルを削除します。
したがって、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;
実際、最後のステップである「一時テーブルの削除」では、しばらくスキップできます。念のため、「念のため」、古いテーブルのある種のバックアップが必要になります。
詳細情報:
- MySQLリファレンスマニュアル:CREATETABLE構文>
- MySQLリファレンスマニュアル:INSERT構文
- MySQLリファレンスマニュアル: INSERT...SELECT構文