2009-07-24 17 views
7

Uczę się jak używać sqlite3 z pythonem. Przykład w książce tekstowej, którą obserwuję, to baza danych, w której każdy rekord kraju ma region, kraj i populację.Co robi słowo kluczowe CONSTRAINT w tym instrukcji CREATE TABLE

Książka mówi:

Poniższy urywek używa słowa kluczowego CONSTRAINT określić że żadne dwa wpisy w tabeli są utworzony zostanie kiedykolwiek mają te same wartości dla regionu i kraju:

>>> cur.execute(''' 
CREATE TABLE PopByCountry(
    Region TEXT NOT NULL, 
    Country TEXT NOT NULL, 
    Population INTEGER NOT NULL, 
    CONSTRAINT Country_Key PRIMARY KEY (Region, Country)) 
''') 

Proszę wyjaśnić, co tutaj robi CONSTRAINT Country_Key. Jeśli go usuniemy, sama instrukcja PRIMARY KEY wydaje się zapewniać, że każdy kraj ma unikalną nazwę dla tego regionu.

Odpowiedz

9

Country_key podaje po prostu nazwę ograniczenia. Jeśli tego nie zrobisz, twoja nazwa zostanie wygenerowana. Jest to przydatne, gdy istnieje kilka ograniczeń na stole i musisz upuścić jeden z nich.

Jako przykład upuszczenie ograniczenia:

ALTER TABLE PopByCountry DROP CONSTRAINT Country_Key 
+0

Zgadza się. Rzeczywiste ograniczenie PRIMARY KEY nie różni się ze słowem kluczowym CONSTRAINT lub bez niego. Słowo kluczowe po prostu pozwala nam zidentyfikować ograniczenie. –

+0

Dzięki za naprawdę szybką odpowiedź. Zaznaczę to jako odpowiedź, jeśli mógłbyś dać mi prosty przykład polecenia edycji/usunięcia ograniczenia później. –

+0

Okazuje się, że wcześniej źle pisałem. Możesz tylko rzucić ograniczenia, a nie edytować je bezpośrednio. Możesz jednak upuścić jeden i dodać kolejny (w efekcie dokonanie edycji) –

1

Jeśli pominąć CONSTRAINT Contry_Key z oświadczeniem, serwer SQL będzie generować nazwę dla klucz podstawowy dla ciebie (klucz podstawowy jest rodzajem przymusu).

Poprzez specyficzne umieszczenie CONSTRAINT w zapytaniu zasadniczo określasz nazwę ograniczenia klucza podstawowego.