sql >> データベース >  >> RDS >> Mysql

存在する場合はテーブルを変更し、存在しない場合は作成します

    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;
    

    詳細情報:

    更新:

    もう1つのオプションは、おそらく簡単ですが、既存のテーブルを削除して、新しいスキーマで再作成することです。これを行うには、次のものが必要です。

    1. 既存のテーブルの正確なコピーである一時テーブルを作成します
    2. 一時テーブルに古いテーブルのデータを入力します
    3. 古いテーブルを削除する
    4. 新しいスキーマで新しいテーブルを作成する
    5. 新しいテーブルに一時テーブルの情報を入力します
    6. 一時テーブルを削除します。

    したがって、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;
    

    実際、最後のステップである「一時テーブルの削除」では、しばらくスキップできます。念のため、「念のため」、古いテーブルのある種のバックアップが必要になります。

    詳細情報:



    1. 別のページの別のクラスのmysqli接続にアクセスするにはどうすればよいですか?

    2. PostgreSQL:外部キー/オン削除カスケード

    3. PL / pgSQLで最も近いX分に丸める方法は?

    4. SwarmClusterを使用したAzureContainerServiceでのDockerの使用