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

SQLite-テーブルを変更する

    SQLiteは、SQL標準の限定されたサブセットALTER TABLEをサポートします 声明。

    SQLiteでは、ALTER TABLE コマンドを使用すると、ユーザーはテーブルの名前を変更したり、既存のテーブルに新しい列を追加したりできます。

    列を追加

    ADD COLUMN 構文は、既存のテーブルに新しい列を追加するために使用されます。

    Artists に列を追加しましょう テーブル:

    ALTER TABLE Artists
    ADD COLUMN Bio TEXT;

    次に、.schemaを使用してテーブルを確認します コマンド:

    sqlite> .schema Artists
    CREATE TABLE Artists(
      ArtistId    INTEGER PRIMARY KEY, 
      ArtistName  TEXT NOT NULL
    , Bio TEXT);
    

    ADD COLUMNを使用する場合は、次の制限が適用されます。 SQLiteの構文:

    • 列にPRIMARY KEYがない可能性があります またはUNIQUE 制約。
    • 列のデフォルト値はCURRENT_TIMEではない可能性があります 、CURRENT_DATECURRENT_TIMESTAMP 、または括弧内の式。
    • NOT NULLの場合 制約が指定されている場合、列にはNULL以外のデフォルト値が必要です。 。
    • 外部キー制約が有効で、REFERENCESの列がある場合 句が追加された場合、列のデフォルト値は NULL である必要があります 。

    テーブルの名前を変更する

    RENAME TO 構文を使用すると、テーブルの名前を変更できます。

    テーブルの名前を変更しましょう:

    ALTER TABLE Albums
    RENAME TO Albums1;

    そして、.tablesで確認してください コマンド:

    sqlite> .tables
    Albums1  Artists
    

    これで、それ以降の操作では、テーブルの新しい名前を使用する必要があります。したがって、次のようなデータを選択できます:

    SELECT AlbumName, Year 
    FROM Artists AS a INNER JOIN Albums1 AS r
    ON a.ArtistId = r.ArtistId
    WHERE a.ArtistName = 'Joe Satriani';
    AlbumName             Year                                              
    --------------------  --------------------------------------------------
    Surfing with the Ali  1987                                              
    Flying in a Blue Dre  1989                                              
    Black Swans and Worm  2010                                              
    

    列の更新または削除

    SQLiteはDROP COLUMNなどの句をサポートしていません 、ALTER COLUMN 、およびADD CONSTRAINT 、SQL標準の一部です。

    ただし、SQLiteでこれらのことを行う方法は他にもあります。

    列を変更する

    Year の名前を変更するとします ReleaseDate への列 。また、NOT NULLを削除します 制限。

    これを行うには、(新しい列定義を使用して)新しいテーブルを作成し、古いテーブルのデータをテーブルに入力します。完了したら、古いテーブルを削除し、元の名前を反映するように新しいテーブルの名前を変更します。

    新しいテーブルを作成する

    まず、新しいテーブルを作成します(ReleaseDateに注意してください) Yearの代わりに 。

    CREATE TABLE Albums(
      AlbumId     INTEGER PRIMARY KEY, 
      AlbumName   TEXT NOT NULL,
      ReleaseDate TEXT,
      ArtistId INTEGER NOT NULL,
      FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId)
    );

    これで、データベースに次のテーブルができました。

    sqlite> .tables
    Albums   Albums1  Artists
    

    データを挿入

    次に、古いテーブルのデータを挿入します。

    INSERTを使用する 古いテーブルからデータを選択し、それを新しいテーブルに挿入するステートメント。このように:

    INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId)
    SELECT AlbumId, AlbumName, Year, ArtistId
    FROM Albums1;

    データが新しいテーブルに挿入されたことを確認します:

    sqlite> SELECT * FROM Albums;
    AlbumId   AlbumName                        ReleaseDate  ArtistId  
    --------  -------------------------------  -----------  ----------
    1         Killers                          1981         7         
    2         Powerslave                       1984         7         
    3         Surfing with the Alien           1987         1         
    4         Heavy as a Really Heavy Thing    1995         11        
    5         Yummy Yummy                      1994         17        
    6         Out of the Loop                  2007         6         
    7         Suck on This                     1989         13        
    8         Pork Soda                        1993         13        
    9         Sailing the Seas of Cheese       1991         13        
    10        Flying in a Blue Dream           1989         1         
    11        Black Swans and Wormhole Wizard  2010         1         
    12        Somewhere in Time                1986         7         
    13        Big Red Car                      1995         17        
    

    古いテーブルを削除する

    新しいテーブルが作成され、データが入力されたので、古いテーブルを削除するか、変更するか、そのままにするかを選択できます。

    とりあえずそのままにしておきましょう。後で削除します。

    列を削除

    列を削除するには、SELECTからテーブルを作成できます 声明。 SELECTで ステートメント、削除する列を省略します— SQLiteは、SELECTに含まれる列のみを作成します ステートメント。

    CREATE TABLE Albums2 AS 
    SELECT AlbumId, AlbumName, ArtistId 
    FROM Albums1;

    次に、データが新しいテーブルに正常に挿入されたことを確認します。

    sqlite> select * from Albums2;
    AlbumId   AlbumName                        ArtistId  
    --------  -------------------------------  ----------
    1         Killers                          7         
    2         Powerslave                       7         
    3         Surfing with the Alien           1         
    4         Heavy as a Really Heavy Thing    11        
    5         Yummy Yummy                      17        
    6         Out of the Loop                  6         
    7         Suck on This                     13        
    8         Pork Soda                        13        
    9         Sailing the Seas of Cheese       13        
    10        Flying in a Blue Dream           1         
    11        Black Swans and Wormhole Wizard  1         
    12        Somewhere in Time                7         
    13        Big Red Car                      17        
    

    これで、データベースに次のテーブルができました。

    sqlite> .tables
    Albums   Albums1  Albums2  Artists
    

    1. 1つのクエリで複数のテーブルに挿入

    2. SQL Server2014CTP1用の新しいVMを準備します

    3. MigrationSchemaMissing(django_migrationsテーブルを作成できません(%s)%exc)

    4. Ansibleを使用してスタンドアロンMySQLからGaleraクラスターへの移行を自動化する方法