Это касается добавления ограничений в sql - PullRequest
0 голосов
/ 17 января 2020
CREATE TABLE STUDENT(
ROLL_NO INT NOT NULL,
STU_NAME VARCHAR (35) NOT NULL UNIQUE,
STU_AGE INT NOT NULL,
STU_ADDRESS VARCHAR (35) UNIQUE,
CONSTRAINT PK_Student PRIMARY KEY (ROLL_NO)
);

Здесь я не могу понять, что такое PK_Student в ADD CONSTRAINT ?? Какова цель написания этого ??

Ответы [ 2 ]

0 голосов
/ 17 января 2020

В частности, MySQL, имя ограничения для PRIMARY KEY игнорируется. Я протестировал создание таблицы примера в моей test схеме, а затем я изучил метаданные:

mysql> select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_schema='test';
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| def                | test              | PRIMARY         | test         | STUDENT    | PRIMARY KEY     |
| def                | test              | STU_NAME        | test         | STUDENT    | UNIQUE          |
| def                | test              | STU_ADDRESS     | test         | STUDENT    | UNIQUE          |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+

Вы можете видеть, что ограничение PRIMARY KEY просто называется "PRIMARY", не учитывая имя ограничения в вашем CREATE ТАБЛИЦА высказывания

Присвоение имени допустимому синтаксису SQL, но MySQL в этом случае игнорирует его.

В некоторых других брендах базы данных SQL, таких как Oracle или Microsoft, имя ограничения будет запомнено.

У ограничений есть имена, так что вы можете исследовать их в метаданных, или в некоторых случаях вы можете удалить их, указав имя.

0 голосов
/ 17 января 2020

что такое PK_Student в ADD CONSTRAINT ??

Каждое ограничение должно иметь имя (точнее, «символ»). Этот символ должен быть уникальным во всей базе данных над этим типом ограничения (первичный ключ, уникальный индекс, внешний ключ, проверка).

Итак, это попытка присвоить имя ограничению первичного ключа.

Бессмысленная и неудачная попытка!

У ограничения первичного ключа нет имени (или оно не показано в SHOW CREATE TABLE), но для ссылки на него ограничение PK имеет значение c, зарезервированный и неизмененный псевдоним PRIMARY (т. е. может быть создано только ограничение первичного ключа или индекс первичного ключа с именем PRIMARY). Или первичный ключ всегда имеет имя PRIMARY, но оно не отображается в SHOW CREATE TABLE - это то же самое.

Так что имя PK_Student будет просто проигнорировано. Это можно увидеть в скрипке .


И снова другими словами:

  1. Символ ограничения или индексное имя для первичного ключа, отличное от PRIMARY будет игнорироваться;
  2. Присвоение символа / имени PRIMARY ограничению или индексу, отличному от первичного ключа, завершится неудачей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...