Ćwiczenia SQL – modyfikacja struktury bazy

CREATE DATABASE · ALTER TABLE · klucze obce · DROP · UPDATE

1 CREATE · FOREIGN KEY

Tworzenie bazy danych i tabel

Utwórz bazę danych sklep oraz tabele: klienci, produkty i zamowienia z odpowiednimi kluczami głównymi i obcymi.

CREATE DATABASE sklep;
USE sklep;

CREATE TABLE klienci (
  id        INT AUTO_INCREMENT PRIMARY KEY,
  imie      VARCHAR(50),
  nazwisko  VARCHAR(50)
);

CREATE TABLE produkty (
  id    INT AUTO_INCREMENT PRIMARY KEY,
  nazwa VARCHAR(100),
  cena  DECIMAL(10,2)
);

CREATE TABLE zamowienia (
  id              INT AUTO_INCREMENT PRIMARY KEY,
  klient_id       INT,
  produkt_id      INT,
  data_zamowienia DATE,
  FOREIGN KEY (klient_id) REFERENCES klienci(id),
  FOREIGN KEY (produkt_id) REFERENCES produkty(id)
);
✏️ Notatki / modyfikacje (np. dodatkowe kolumny, indeksy):
2 DESCRIBE · INFORMATION_SCHEMA

Analiza struktury

Wyświetl strukturę tabeli klienci oraz relacje w tabeli zamowienia korzystając z information_schema.

DESCRIBE klienci;

SELECT *
FROM information_schema.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'zamowienia'
  AND TABLE_SCHEMA = 'sklep';
✏️ Notatki (inne widoki systemowe, dodatkowe filtry):
3 ALTER TABLE · nowe tabele

Rozbudowa bazy danych

Dodaj kolumnę email do tabeli klienci oraz utwórz tabelę dostawy powiązaną z tabelą zamowienia.

ALTER TABLE klienci
ADD email VARCHAR(100);

CREATE TABLE dostawy (
  id             INT AUTO_INCREMENT PRIMARY KEY,
  zamowienie_id  INT,
  data_dostawy   DATE,
  FOREIGN KEY (zamowienie_id) REFERENCES zamowienia(id)
);
✏️ Notatki (np. UNIQUE na email, dodatkowe kolumny w dostawach):
4 ALTER · DROP TABLE

Usuwanie elementów

Usuń kolumnę cena z tabeli produkty oraz tabelę dostawy.

ALTER TABLE produkty
DROP COLUMN cena;

DROP TABLE dostawy;
✏️ Notatki (konsekwencje usuwania kolumn/tabel, klucze obce):
5 CHANGE · UPDATE

Modyfikowanie struktury i danych

Zmień nazwę kolumny imie na imie_klienta i zaktualizuj dane klienta o id = 1, ustawiając adres e‑mail.

ALTER TABLE klienci
CHANGE imie imie_klienta VARCHAR(50);

UPDATE klienci 
SET email = 'jan.kowalski@example.com'
WHERE id = 1;
✏️ Notatki (inne zmiany nazw, masowe UPDATE):
6 ALTER · MODIFY

Zmiana typu kolumny

Zmień typ kolumny nazwisko w tabeli klienci z VARCHAR(50) na VARCHAR(100), aby umożliwić dłuższe nazwiska.

ALTER TABLE klienci
MODIFY COLUMN nazwisko VARCHAR(100);
✏️ Notatki (inne zmiany typu – INT → BIGINT, dodanie NOT NULL):
7 FOREIGN KEY · CONSTRAINT

Dodawanie i usuwanie klucza obcego

Dodaj klucz obcy w tabeli zamowienia, wiążący kolumnę klient_id z tabelą klienci, a następnie usuń ten klucz obcy.

-- dodanie klucza obcego (jeśli wcześniej go nie było)
ALTER TABLE zamowienia
ADD CONSTRAINT fk_zamowienia_klienci
FOREIGN KEY (klient_id) REFERENCES klienci(id);

-- usunięcie klucza obcego
ALTER TABLE zamowienia
DROP FOREIGN KEY fk_zamowienia_klienci;
✏️ Notatki (sprawdź nazwę constraintu w INFORMATION_SCHEMA):
8 RENAME TABLE

Zmiana nazwy tabeli

Zmień nazwę tabeli klienci na klienci_sklepu, a następnie sprawdź, czy struktura i dane zostały zachowane.

RENAME TABLE klienci TO klienci_sklepu;

DESCRIBE klienci_sklepu;

SELECT *
FROM klienci_sklepu
LIMIT 5;
✏️ Notatki (konsekwencje zmiany nazwy przy istniejących FK / widokach):