Rozdział 10. ♦ Podstawy SQL 281
CREATE TABLE Klient( Indeks INTEGER. Nazwa VARCHAR(20)
Każda kolumna może mieć dodatkowe atrybuty. Najczęściej spotykane, które będziemy wykorzystywać w dalszej części książki, to: PRIMARY KEY, NOT NULL, AUTO_INCREMENT, INDEX.
Atrybut PRIMARY KEY oznacza, że dana kolumna jest kluczem podstawowym. Jednocześnie wymusza to indeksowanie tej kolumny oraz zapis w kolejnych wierszach unikalnych wartości (to zrozumiałe, skoro klucz podstawowy musi jednoznacznie identyfikować każdy wiersz). Kolumny z atrybutem PRIMARY KEY są automatycznie indeksowane.
Atrybut NOT NULL oznacza, że w danej kolumnie nie mogą znajdować się wartości puste, czyli że każdy wiersz w tej kolumnie musi zawierać jakąś wartość. Próba zapisania wartości pustej zakończy się niepowodzeniem.
Atrybut AUTO_INCREMENT ma zastosowanie jedynie do kolumn, które przechowują wartości całkowite. Jeżeli podczas wstawiania nowego wiersza jako wartość kolumny zostanie podana wartość pusta NULL lub wartość O, zostanie ona zamieniona na wartość o jeden większą niż wartość maksymalna zapisana w tej kolumnie. Innymi słowy wartość takiej kolumny jest automatycznie zwiększana o jeden podczas wstawiania nowego wiersza.
Atrybut INDEX oznacza, że dana kolumna będzie indeksowana. Klucze podstawowe są indeksowane automatycznie.
Jeśli zatem w naszej przykładowej tabeli Klient kolumna Indeks miałaby być kluczem podstawowym, należałoby zastosować konstrukcję:
CREATE TABLE Klient!
Indeks INTEGER NOT NULL PRIMARY KEY.
Nazwa VARCHAR<20)
Formalnie kolumna będąca kluczem podstawowym powinna być, jak w powyższym przypadku, deklarowana również z atrybutem NOT NULL. Jeśli jednak atrybut ten zostanie pominięty, serwer doda go automatycznie. Nie zostanie zatem zgłoszony błąd, jeśli zastosuje się formę skróconą w postaci:
CREATE TABLE Klient!
Indeks INTEGER PRIMARY KEY.
Nazwa VARCHAR(20)
Jeśli chcielibyśmy, aby kolumna Indeks była kluczem podstawowym z generowanymi automatycznie wartościami, natomiast kolumna Nazwa nie mogła zawierać wartości pustych, należałoby zastosować konstrukcję:
CREATE TABLE Klient!
Indeks INTEGER AUTO INCREMENT NOT NULL PRIMARY KEY.
Nazwa VARCHAR(20) NOT NULL