Direct naar de hoofdinhoud
Module 9 · Les 3 van 435/57 in de cursus~10 min
Modulelessen (3/4)

De structuur wijzigen: ALTER TABLE

De behoeften van een applicatie veranderen in de loop van de tijd en de database moet gelijke tred houden. ALTER TABLE is de (extreem veelzijdige) opdracht die is bedoeld voor het wijzigen van bestaande tabelschema's zonder ze te hoeven laten vallen (waarbij de gegevens erin worden geriskeerd).

Kolommen aanpassen (ADD / DROP / ALTER)

Het toevoegen van een kolom vereist zorg. Als de tabel al gegevens bevat, zal het toevoegen van een kolom "NOT NULL" een fout in Postgres opleveren: wat moet er in de oude rijen worden ingevoegd? U moet een DEFAULT koppelen.

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;

Niet alleen toevoegen of verwijderen: u moet vaak het type van een kolom of een van de beperkingen ervan opnieuw configureren:

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;

Beperkingen toevoegen tijdens runtime

Net als bij CREATE TABLE kunnen we ALTER TABLE gebruiken om een ​​CONSTRAINT te koppelen aan een tabel die al in gebruik is in de productie-app.

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;

Hernoemen

Zowel kolommen als tabellen kunnen worden hernoemd:

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

Probeer het

Oefening#sql.m9.l3.e1
Pogingen: 0Laden…

De tabel 'producten' heeft momenteel een kolom 'naam'. Wijzig de tabel door de kolom 'naam' te hernoemen naar 'titel'. Gebruik de bewerking RENAME COLUMN.

Editor laden…
Toon hint

Syntaxis: ALTER TABLE ... RENAME COLUMN ... TO ...

Oplossing beschikbaar na 3 pogingen

Beperkingen toevoegen in de postproductie

Oefening#sql.m9.l3.e2
Pogingen: 0Laden…

Wijzig de tabel 'producten' door een CHECK-beperking toe te voegen (genaamd 'verifica_prezzo') die vereist dat de prijs (kolom 'prijs') groter is dan 0. De beperking moet worden toegevoegd zonder de oorspronkelijke kolom te verwijderen.

Editor laden…
Toon hint

Syntaxis: ALTER TABLE tabel ADD CONSTRAINT naam CHECK (...)

Oplossing beschikbaar na 3 pogingen