メインコンテンツにスキップ
モジュール 9 · レッスン 3 / 4コース内の 35/57~10 min
モジュールのレッスン (3/4)

構造の変更: ALTER TABLE

アプリケーションのニーズは時間の経過とともに変化するため、データベースもそれに対応する必要があります。 ALTER TABLE は、既存のテーブル スキーマを削除することなく (内部のデータを危険にさらすことなく) 変更することに特化した (非常に多用途な) コマンドです。

列の変更 (ADD / DROP / ALTER)

列の追加には注意が必要です。テーブルに既にデータが含まれている場合、「NOT NULL」列を追加すると、Postgres でエラーがスローされます。古い行には何を挿入する必要がありますか? DEFAULT を関連付ける必要があります。

SQL
-- Aggiungiamo una colonna
ALTER TABLE users ADD COLUMN age INTEGER; -- Ok, sarà NULL ovunque

-- Aggiungiamo NOT NULL, quindi diamogli un deafult
ALTER TABLE users ADD COLUMN active BOOLEAN NOT NULL DEFAULT true;

-- Cancellare una colonna (ATTENZIONE! i dati andranno persi)
ALTER TABLE users DROP COLUMN age;

単に追加または削除するだけではなく、列の type やその制約の 1 つを再構成する必要があることがよくあります。

SQL
-- Cambia il tipo di dato (postgreSQL farà un 'cast' dei dati esistenti se possibile)
ALTER TABLE users ALTER COLUMN username TYPE VARCHAR(100);

-- Aggiunge il vincolo NOT NULL
ALTER TABLE users ALTER COLUMN username SET NOT NULL;

-- Rimuove il vincolo NOT NULL (ritorna ad accettare null)
ALTER TABLE users ALTER COLUMN username DROP NOT NULL;

実行時に制約を追加する

CREATE TABLE と同様に、ALTER TABLE を使用して、運用アプリですでに使用されているテーブルに CONSTRAINT をアタッチできます。

SQL
-- Aggiungi un nuovo Foreign Key
ALTER TABLE orders
  ADD CONSTRAINT fk_order_status FOREIGN KEY (status_id) REFERENCES statuses(id);

-- Aggiungi un CHECK
ALTER TABLE products
  ADD CONSTRAINT price_positive CHECK (price > 0);

-- E per distruggerli?
ALTER TABLE products DROP CONSTRAINT price_positive;

名前の変更

列とテーブルの両方の名前を変更できます。

SQL
ALTER TABLE users RENAME TO auth_users;
ALTER TABLE auth_users RENAME COLUMN username TO login_name;

試してみてください

運動#sql.m9.l3.e1
試行回数: 0読み込み中…

現在、「products」テーブルには「name」列があります。 「name」列の名前を「title」に変更して、テーブルを変更します。 RENAME COLUMN 操作を使用します。

エディターを読み込み中…
ヒントを表示

構文: ALTER TABLE ... RENAME COLUMN ... TO ...

3 回の試行後に解決策が利用可能になります

ポストプロダクションでの制約の追加

運動#sql.m9.l3.e2
試行回数: 0読み込み中…

価格 ('price' 列) が 0 より大きいことを要求する CHECK 制約 ('verifica_prezzo' という名前) を追加して、'products' テーブルを変更します。 この制約は、元の列を削除せずに追加する必要があります。

エディターを読み込み中…
ヒントを表示

構文: ALTER TABLE テーブル ADD CONSTRAINT 名 CHECK (...)

3 回の試行後に解決策が利用可能になります