Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Zajęcia nr 4.

Bazy danych mySql – Tworzenie kluczy obcych

Tworzenie klucza obcego (w efekcie relacji między tabelami)

Sytuacja 1: Podczas tworzenia tabeli

CREATE TABLE studenci (
    student_ID int NOT NULL,
    klasa int ,
    PRIMARY KEY (student_ID),
    FOREIGN KEY (klasa) REFERENCES klasy(klasa_id));
Sytuacja 2: Tabela i pole istnieje

ALTER TABLE uczniowie
ADD FOREIGN KEY (klasa) REFERENCES klasy(klasa_id);

Gdy chcemy nadać nazwę kluczowi obcemu polecenie przyjmie postać:

ALTER TABLE uczniowie ADD CONSTRAINT FK_klasa FOREIGN KEY (klasa)


REFERENCES klasy (klasa_id)
Usuwanie klucza obcego:
ALTER TABLE uczniowie
DROP FOREIGN KEY FK_klasa;

Zadanie: W bazie szkoła utwórz klucze obce.

LP Nazwa klucza Tabela Pole klucza Pokrewna Pole klucza


obcego obcego tabela podstawowego
1 FK_klasa uczniowie klasa klasy IdKlasy
2 FK_uczen oceny idUcznia uczniowie IdUcznia
3 FK_przedmiot oceny idPrzedmiotu przedmioty IdPrzedmiotu
4 FK_nauczyciel oceny idNauczyciela nauczyciele IdNauczyciela
5 FK_rodzaj_oceny oceny idRodzajuOceny Rodzaje_ocen IdRodzajuOceny
6 FK_ocena oceny ocena nazwyOcen IdOceny
Dodawanie ograniczeń CONSTRAINT do pól tabeli
Ograniczenia dla pól (kolumn) w tabelach – stosujemy je m. in. po to, żeby zachować spójność
danych. Ograniczenia można dodawać także osobno (pod definicją tabeli).

Ograniczeniem jest:

- PRIMARY KEY - pole, które stało się polem klucza głównego służy do identyfikacji rekordu,
wartości nie mogą się w nim powtarzać, pole nie może pozostać puste
- FOREIGN KEY – klucz obcy – kolumna, która jest kluczem obcym, służy do połączenia tej
tabeli z polem klucza głównego innej tabeli

Oto lista innych słów kluczowych służących do ograniczania pól (kolumn) w tabelach:

Ograniczenie Opis Przykład


NOT NULL Pole (kolumna) z takim ograniczeniem CREATE TABLE osoba
musi być wypełnione. (
W przypadku braku tego ograniczenia, imie VARCHAR(20) NOT NULL,
MySQL automatycznie wstawi opcję nazwisko VARCHAR(30) NOT NULL
„NULL” pozwalającą na takie wartości. );

DEFAULT Pozwala określić wartość domyślną CREATE TABLE osoba


dla nowych rekordów (w razie, gdy nie (
podamy żadnej wartości w tym polu). kod CHAR(5) NOT NULL DEFAULT
W przypadku braku tego ograniczenia, '05-900',
MySQL automatycznie wstawi opcję poczta VARCHAR(30) DEFAULT
„DEFAULT NULL”, która powoduje 'Warszawa'
automatyczne wstawianie wartości );
„NULL” do pominiętych pól.

CHECK Dotyczy MariaDB od wersji 10.2.1 CREATE TABLE osoba


Umożliwia tworzenie warunków, które (
muszą spełniać dane wstawiane w polu a INT,
ze zdefiniowanym takim ograniczeniem. b INT,
CONSTRAINT c1 CHECK (a <> b),
(2*a <> b) ENFORCED
);
UNIQUE Wymaga aby wartości w kolumnie tabeli ALTER TABLE osoby ADD
były niepowtarzalne UNIQUE(`PESEL`);
CREATE TABLE osoby
(id int primary key,
pesel char(11) UNIQUE)
Instrukcja UPDATE – aktualizowanie danych
Do aktualizowania danych służy instrukcja

UPDATE …..SET …..


W klauzuli UPDATE podajemy nazwę tabeli, w klauzuli SET nazwę modyfikowanej kolumny oraz
przypisaną jej nową wartość. Wykonanie takiej instrukcji powoduje zmianę we wszystkich wierszach
podanej kolumny.

Jeżeli modyfikacja danych ma dotyczyć tylko wybranych wierszy, do instrukcji należy dołączyć
klauzulę WHERE

UPDATE …..SET …..WHERE ……..


Przykłady:

LP Działanie Instrukcja SQL

1 Dla wszystkich rekordów w tabeli uczniowie w polu UPDATE uczniowie SET klasa=1
klasa wpisz wartość 1

2 Dla wszystkich rekordów w tabeli uczniowie w polu UPDATE uczniowie SET klasa=5
klasa wpisz wartość 5

3 Dla wszystkich rekordów w tabeli uczniowie w polu UPDATE uczniowie SET


miejscowosc wpisz wartość ‘Warszawa’ miejscowosc='Warszawa'

4 Dla ucznia (id 4) w tabeli uczniowie w polu UPDATE uczniowie


miejscowosc wpisz wartość ‘Sochaczew’ SET miejscowosc='Sochaczew'
WHERE uczen_id=4

5 Dla uczniów (id 3 i Id 4) w tabeli uczniowie w polu UPDATE uczniowie SET klasa=2
klasa wpisz wartość 2 WHERE uczen_id=3 or uczen_id=4

6 Dla ucznia o id 3 w tabeli uczniowie w polu UPDATE uczniowie SET


miejscowość wpisz wartość ‘Piaseczno’, w polu klasa miejscowość='Piaseczno', klasa=3
wartość 3 WHERE uczen_id=3
Zadania:

1. Do tabeli klasy dodaj pole rok_szkolny varchar(10).


Uaktualnij pole rok_szkolny wartością „2022/23”
2. W tabeli uczniowie dla rekordów, gdzie miejsce zamieszkania jest puste, uaktualnij pole
wartością „Piaseczno”
3. Do tabeli uczniowie dodaj pole kod_pocztowy (varchar(6)). Wypełnij to pole wartością
‘02-987’ dla wszystkich uczniów z Piaseczna,
’00-792’ dla wszystkich uczniów z Warszawy,
’05-660’ dla wszystkich uczniów z Sochaczew
4. Do tabeli uczniowie dodaj pole e_mail (varchar(90)).
Uaktualnij pole wg wzorca: imie.nazwisko@gmail.com
5. W tabeli uczniowie dla uczniów o id=9 oraz id=10 uaktualnij pole spe na wartość równą 1.
6. W tabeli uczniowie w polu klasa ustaw wartość 3 dla uczniów nie mających wypełnionego
pola klasa.
7. W tabeli oceny podwyższ wartość oceny o 1 dla oceny o idOceny=1;
8. W tabeli klasy pole rok_szkolny zmień na wartość ‘2022/23’, klasa 1A->2A, 1B->2B, 1C->2C
Utwórz 2 kopie tabeli uczniowie

CREATE TABLE uczniowie_kopia AS SELECT * FROM uczniowie


CREATE TABLE uczniowie_kopia2 AS SELECT * FROM uczniowie

Usuwanie rekordów – DELETE


Jeśli jakieś rekordy z danej tabeli już nas nie interesują pozbywamy się ich poleceniem DELETE

Składania polecenia DELETE


DELETE FROM nazwa_tabeli [WHERE warunek]

1. Usuń z tabeli uczniowie_kopia uczniów z miejscowości Sochaczew

DELETE FROM uczniowie_kopia WHERE miejsce_zamieszkania=’Sochaczew’

2. Usuń z tabeli nowi_uczniowie pozostałych uczniów

DELETE FROM nowi_uczniowie

Usuwanie rekordów – TRUNCATE TABLE

Składnia instrukcji: TRUNCATE [TABLE] tbl_name


Instrukcja MySQL TRUNCATE TABLE pozwala usunąć wszystkie dane w tabeli.

Logicznie, instrukcja TRUNCATE TABLE jest jak instrukcja DELETE bez klauzuli WHERE, która usuwa
wszystkie wiersze z tabeli, lub sekwencja instrukcji DROP TABLE i CREATE TABLE.

Jednakże instrukcja TRUNCATE TABLE jest bardziej wydajna niż instrukcja DELETE, ponieważ usuwa i
odtwarza tabelę zamiast usuwać wiersze jeden po drugim.

Jeśli istnieją jakiekolwiek FOREIGN KEY ograniczenia z innych tabel, które odwołują się do tabeli, do
której stosujemy TRUNCATE TABLE, instrukcja TRUNCATE TABLE zakończy się niepowodzeniem.
Pojawi się błąd:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint

3. Sprawdź, czy w tabeli oceny jest klucz obcy na polu idUcznia będący referencją do pola
IdUcznia w tabeli uczniowie.
4. Jeśli istnieje klucz obcy odnoszący się do tabeli uczniowie, wykonaj polecenie TRUNCATE dla
tabeli uczniowie. Wynik: polecenie powinno zakończyć się niepowodzeniem, natomiast
pojawi się informacja o błędzie ERROR 1701.

You might also like