Что делает ключевое слово CONSTRAINT в этом операторе CREATE TABLE?

Я изучаю, как использовать sqlite3 с python. Пример в учебнике, которому я следую, — это база данных, в которой каждая запись о стране имеет регион, страну и население.

В книге говорится:

В следующем фрагменте используется ключевое слово CONSTRAINT, чтобы указать, что никакие две записи в создаваемой таблице никогда не будут иметь одинаковые значения для региона и страны:

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

Пожалуйста, объясните, что здесь делает CONSTRAINT Country_Key. Если я удалю его, одно только утверждение PRIMARY KEY, по-видимому, гарантирует, что каждая страна имеет уникальное имя для этого региона.


person sql beginner    schedule 24.07.2009    source источник


Ответы (2)


Country_key просто дает имя ограничению. Если вы этого не сделаете, имя будет сгенерировано для вас. Это полезно, когда в таблице есть несколько ограничений и вам нужно удалить одно из них.

В качестве примера удаления ограничения:

ALTER TABLE PopByCountry DROP CONSTRAINT Country_Key
person Matthew Jones    schedule 24.07.2009
comment
Это правильно. Фактическое ограничение PRIMARY KEY не отличается от ключевого слова CONSTRAINT или без него. Ключевое слово просто позволяет нам идентифицировать ограничение. - person Matthew Jones; 24.07.2009
comment
Спасибо за действительно быстрый ответ. Я отмечу это как ответ, если вы могли бы дать мне простой пример команды для редактирования/удаления ограничения позже. - person sql beginner; 24.07.2009
comment
Оказывается, я оговорился ранее. Вы можете только отбрасывать ограничения, но не редактировать их напрямую. Однако вы можете удалить один и добавить другой (фактически редактируя) - person Matthew Jones; 24.07.2009
comment
Оказывается, sqlite не поддерживает DROP CONSTRAINT, но я буду помнить об этом, когда буду использовать другой SQL Engine. - person sql beginner; 24.07.2009

Если вы опустите CONSTRAINT Contry_Key в операторе, SQL-сервер сгенерирует для вас имя для вашего ограничения PRIMARY KEY (PRIMARY KEY — это тип ограничения).

Специально помещая CONSTRAINT в запрос, вы, по сути, указываете имя для вашего ограничения первичного ключа.

person Mike Dinescu    schedule 24.07.2009