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 podstawowy skł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) REFERENCES nazwa_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 );
Przypisz kolumnie miasto wartość domyślną Sopot. ALTER TABLE osoby ALTER COLUMN miasto SET DEFAULT Sopot ;
Usuń wartość domyślną z kolumny miasto. ALTER TABLE osoby ALTER COLUMN miasto DROP DEFAULT;