アップデーターでもあるインストーラーを実行する必要があります。インストーラーは、いくつかのテーブルが存在したか、いくつかの列を失ったか、または構造が最新であるために変更する必要がないかに関係なく、mysqlデータベースの特定のスキーム/構造を持つことができる必要があります。
ALTER
とCREATE
のエレガントな組み合わせを作成するにはどうすればよいですか?
「ADD ... IF ... Duplicate」のようなものがあるに違いないと思っていました
テーブルAがあるとします。あるクライアントでは、テーブルに1つの列-A1があり、別のクライアントには同じテーブルがありますが、列A1と列A2があります。
Sqlコマンドで両方のクライアントのテーブルAにA1、A2、A3の3つの列を保持させます。
繰り返しますが、私のスクリプトは、mysqlにダンプするsqlファイルです。
どうすればいいのですか?ありがとう:-)
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;
詳しくは:
UPDATE:
もう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;
実際、最後のステップである「一時テーブルをドロップします。」、しばらくスキップできます。念のために、古いテーブルの何らかのバックアップ、「ジャストインケース」が必要になります。
詳しくは:
コーディング言語を使用している場合:
SHOW TABLES LIKE 'myTable'
値を返す場合はalterを呼び出し、そうでない場合はcreateを呼び出します