#mysql #sql #database
Вопрос:
Например, в последней строке следующей инструкции create table вместо записи ОГРАНИЧЕНИЯ PK_food ПЕРВИЧНЫЙ КЛЮЧ (food_numb), не мог ли я просто сделать ПЕРВИЧНЫЙ КЛЮЧ(food_numb)?? Какова цель ключевого слова CONSTRAINT?
CREATE TABLE food
(
food_numb integer,
food_description varchar (256)
source_numb integer,
amount integer,
CONSTRAINT PK_food PRIMARY KEY (food_numb)
)
Комментарии:
1. Существуют и другие типы ограничений, помимо первичного ключа, которые требуют использования
CONSTRAINT
синтаксиса. В случае первичного ключа у вас есть два варианта.
Ответ №1:
Обычно мы используем ограничение для первичного ключа, когда берем составной первичный ключ
напр.:
ОГРАНИЧЕНИЕ PK_Food ПЕРВИЧНЫЙ КЛЮЧ (food_num,food_description)
В этом случае у вас есть два варианта. Существует много других типов ограничений, для которых вам действительно нужно использовать ключевое слово CONSTRAINT.
Обратитесь к этому для получения дополнительной информации об ограничениях mysql
Комментарии:
1. Как насчет использования внешних ключей, вы рекомендуете использовать ограничение fk_example xyz ссылки на таблицу1(идентификатор)? Что-то в этом роде? Или также нет необходимости в ключевом слове constraint
2. Если вы не создадите ограничений. Он автоматически создаст свое собственное имя ограничения. Использование ограничения позволяет назначить определенное имя ограничению внешнего ключа. Это может быть использовано для облегчения понимания сообщений об ошибках.
Ответ №2:
Вы должны указать имя ОГРАНИЧЕНИЯ, если хотите ссылаться на него дальше. Например, для его удаления.
Вы можете пропустить ключевое слово ОГРАНИЧЕНИЯ (и, конечно, его имя) и разрешить MySQL всегда автоматически генерировать имя, но делайте это только в том случае, если вы не планируете ссылаться на имя ограничения в будущем.
Вы всегда можете найти имя ограничения (как указанное явно, так и сгенерированное автоматически) с помощью SHOW CREATE TABLE
инструкции.
Нецелесообразно использовать предложение ОГРАНИЧЕНИЯ для ПЕРВИЧНОГО КЛЮЧА — это исключение, указанное имя будет игнорироваться, а предопределенное имя PRIMARY
будет использоваться в любом случае. Это задокументировано.