Autor: Joanna Karwowska
Klucz podstawowy – PRIMARY KEY
Klucz kandydujący – UNIQUE
Klucz alternatywny - klucze
kandydujące, które nie zostały wybrane na klucz podstawowy
Klucz obcy - REFERENCES
Tworząc tabelę, można zdefiniować zarówno klucz główny jak i klucze kandydujące.
Zdefiniowanie klucza głównego wymaga użycia klauzuli PRIMARY KEY.
W tabeli może być zidentyfikowany tylko jeden klucz główny.
Definicja klucza głównego znajduje się po
definicjach pól, jeżeli klucz główny składa się z kilku pól podaje się listę nazw pól oddzieloną przecinkami.
Słowo UNIQUE służy do określenia, która
kolumna (lub grupa kolumn) musi być unikalna i jest przez to kluczem kandydującym.
Użycie ograniczenia UNIQUE powoduje, że
próba powtórzenia danych w tych kolumnach będzie przez bazę danych powstrzymana.
Atrybut PRIMARY KEY oznacza, że dana kolumna będzie kluczem podstawowym.
Kolumny z takim atrybutem są automatycznie indeksowane oraz unikatowe (każdy wiersz
takiej kolumny musi mieć inną wartość).
Indeksowanie kolumny oznacza, że wewnątrz bazy powstanie specjalna struktura
porządkująca dane w kolumnie (kolumnach), co przyspiesza wiele operacji takich jak
sortowanie czy wyszukiwanie.
Utwórz tabelę
osoby
, w której pole id będzie kluczem podstawowym.
CREATE TABLE
osoby
(id INT PRIMARY KEY AUTO_INCREMENT, nazwisko VARCHAR(25),
);
Utwórz tabelę
test
, w której pola id i nazwa tworzą klucz podstawowy.CREATE TABLE
test
(id INT,
nazwa VARCHAR(20),
PRIMARY KEY(id, nazwa) );
Dodaj do tabeli
osoby
klucz podstawowy składający się z kolumny id.
ALTER TABLE osoby ADD CONSTRAINT pk PRIMARY KEY (id);
gdzie pk jest nazwą klucza podstawowego.
Dodaj do tabeli
osoby
klucz podstawowyskładający się z kolumn id, imie, nazwisko.
ALTER TABLE osoby ADD CONSTRAINT pk
PRIMARY KEY (id, imie, nazwisko);
Usuń z tabeli
osoby
klucz podstawowy.ALTER TABLE osoby
DROP PRIMARY KEY;
Klucz kandydujący – UNIQUE – jest to pole unikatowe, które w sposób jednoznaczny identyfikuje każdy rekord tabeli.
np. PESEL CHAR(11) UNIQUE NOT NULL
Może być kluczem podstawowym tabeli.
Projektant bazy danych decyduje o tym, który z kluczy kandydujących wybrać na klucz podstawowy.
Dodanie atrybutu UNIQUE do kolumny pesel uzyskamy za pomocą instrukcji:
ALTER TABLE osoby ADD CONSTRAINT
pesel_unique UNIQUE (pesel);
Usunięcie atrybutu UNIQUE z kolumny pesel uzyskamy za pomocą instrukcji:
ALTER TABLE osoby
DROP INDEX pesel_unique;
Klucz obcy – (klauzula REFERENCES) służy do ustalenia relacji między
tabelami (definiowania więzów integralności).
Zdefiniowanie klucza obcego powoduje przerzucenie na serwer konieczności
badania spójności danych.
[CONSTRAINT
nazwa]
FOREIGN KEY (kol1, …, kolN) REFERENCESnazwa_tabeli(kol1, …, kolN)
nazwa –
nazwa ograniczenia, za pomocą której będzie ono identyfikowane; może być pominięta (wówczas zostanie nadana nazwa systemowa); kolumny wymienione po słowach FOREIGN KEY określają kolumny w tabeli dla której definiujemy ograniczenie, zawierające klucz obcy;
nazwa_tabeli
określa, z której tabeli pochodzi klucz podstawowy; kolumny wymienione po REFERENCES
nazwa_tabeli
określają, z których kolumn pochodzi klucz podstawowy.nazwa_kolumny typ_kolumny atrybuty
REFERENCES nazwa_tabeli(nazwa_kolumny) np.
stanowisko_id INT NOT NULL
REFERENCES stanowiska(id_stanowiska)
Przykład
Sprawdź działanie poniższej instrukcji w swojej bazie danych (firma_nazwisko).
INSERT INTO pracownicy
VALUES (8, ‘Jan’, ‘Nowak’, ‘1990-01-01’,
‘90010104321’, ‘Sopot’, 6);
Uwaga!
Zostanie zgłoszony błąd, ponieważ w tabeli
stanowiska nie istnieje rekord o identyfikatorze 6!
Utwórz klucz obcy w taki sposób, aby
kolumna stanowisko.id z tabeli pracownicy była powiązana z kolumną id tabeli
stanowiska .
ALTER TABLE pracownicy
ADD CONSTRAINT stanowiska_fk FOREIGN KEY (stanowisko_id)
REFERENCES stanowiska (id_stanowiska);
Usuń ograniczenie związane z kluczem obcym w tabeli pracownicy.
ALTER TABLE nazwa_tabeli DROP FOREIGN KEY
nazwa_ograniczenia ; np.
ALTER TABLE pracownicy
DROP FOREIGN KEY stanowiska_fk ;
Zaprojektuj tabelę w której kolumna miasto będzie miała wartość domyślną SOPOT.
CREATE TABLE
osoby
(
id INT PRIMARY KEY NOT NULL, nazwisko VARCHAR(20),
miasto VARCHAR(20) DEFAULT ‘SOPOT’
);