Перейти к содержимому

Mysql add constraint что это

  • автор:

ADD CONSTRAINT в MySQL (Ограничения внешних ключей)

Начиная с версии 3.23.43b, в InnoDB включены ограничения внешних ключей.
InnoDB — первый формат таблиц MySQL, который обеспечивает возможность
задавать ограничения внешнего ключа, чтобы обеспечить целостность данных.

Начиная с версии 3.23.43b, в InnoDB включены ограничения внешних ключей.InnoDB — первый формат таблиц MySQL, который обеспечивает возможностьзадавать ограничения внешнего ключа, чтобы обеспечить целостность данных.

Синтаксис задания ограничения внешнего ключа в InnoDB следующий:

[CONSTRAINT symbol] FOREIGN KEY (index_col_name, . ) REFERENCES table_name (index_col_name, . ) [ON DELETE CASCADE | ON DELETE SET NULL]

Обе таблицы должны быть InnoDB-типа; обязательно также наличие индекса, вкотором внешний ключ и ссылочный ключ должны находиться в первых столбцах.Для таблиц InnoDB индексы по внешним ключам или ссылочным ключам несоздаются автоматически: их создание требуется задавать явно.

Соответствующие столбцы внешнего и ссылочного ключей в таблице InnoDBдолжны содержать одинаковые типы данных, чтобы их можно было сравниватьбез преобразования типов. Размер и знак целочисленных типов должны бытьодинаковыми. Длины для строковых типов могут не совпадать.

Начиная с версии 3.23.50 с ограничением внешнего ключа можно такжесвязывать выражения ON DELETE CASCADE или ON DELETE SET NULL .

Если указано выражение ON DELETE CASCADE и строка в родительской таблицеудалена, то в формате InnoDB все эти строки автоматически удаляются такжеи из дочерней таблицы, значения внешнего ключа которой равны значениямссылочного ключа в строке родительской таблицы. Если указано выражение ONDELETE SET NULL , строки дочерней таблицы автоматически обновляются,поэтому столбцам во внешнем ключе также присваивается значение SQL NULL .

Начиная с версии 3.23.50 в InnoDB не осуществляется проверка ограниченийвнешних ключей на наличие значений внешних или родительских ключей,которые содержат столбец NULL .

Начиная с версии 3.23.50 синтаксический анализатор InnoDB обеспечиваетвозможность использовать обратные кавычки (`), ограничивающие имена таблици столбцов в указанном выше значении, однако синтаксический анализаторInnoDB еще «не знает» о переменной lower_case_table_names , которая можетбыть задана в файле `my.cnf'.

CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB; CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL ) TYPE=INNODB;

Если оператор MySQL CREATE TABLE выдает ошибку с номером 1005, и в строкесообщения об ошибке присутствует ссылка на ошибку с номером 150, топроизошел сбой создания таблицы из-за того, что ограничения внешнего ключане были сформированы надлежащим образом. Аналогично и для оператора ALTERTABLE : если происходит ошибка при выполнении оператора и в сообщенииприсутствует ссылка на ошибку с номером 150, то определение внешнего ключадля преобразовываемой таблицы сформировано неправильно.

Начиная с версии 3.23.50, для таблиц InnoDB обеспечивается возможностьдобавлять новые ограничения внешних ключей для таблиц при помощи

ALTER TABLE yourtablename ADD CONSTRAINT FOREIGN KEY (. ) REFERENCES anothertablename(. )

При проверке внешних ключей для таблиц InnoDB устанавливается совместноиспользуемая блокировка строк на подлежащих просмотру родительских илидочерних записях. Проверка ограничений внешнего ключа для таблиц InnoDBпроизводится немедленно и не откладывается до принятия транзакции.

Формат InnoDB обеспечивает возможность удалить любую таблицу, даже еслиэто нарушит ограничения внешнего ключа, ссылающегося на таблицу. Приудалении таблицы также удаляются ограничения, определенные оператором еесоздания.

Если удаленная таблица создается повторно, ее определение должно бытьсогласовано с ограничениями внешнего ключа, который на нее ссылается. Вэтой таблице необходимо правильно задать имена и типы столбцов; в нейтакже должны присутствовать индексы ключей, на которые производитсяссылка, как указано выше. Если эти условия не будут выполнены, MySQLвыдаст ошибку с номером 1005 и ссылку на ошибку с номером 150 в строкесообщения об ошибке.

Начиная с версии 3.23.50 InnoDB возвращает определения внешних ключейтаблицы, если вызвать

SHOW CREATE TABLE yourtablename

Помимо этого, mysqldump выводит корректные определения таблиц в файлдампа, «не забывая» о внешних ключах.

Список ограничений внешнего ключа таблицы T можно также вывести при помощикоманды

SHOW TABLE STATUS FROM yourdatabasename LIKE 'T'

Ограничения внешнего ключа выводятся в комментариях к таблице.

Источник: www.mysql.ru/docs/man/SEC451.html

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Для чего нужен Constraint name в mysql?

У каждого объекта в базе данных, включая внешние ключи таблиц, должно быть имя, необходимое для того, что бы в последствии можно было модифицировать данный объект. Если имя не указано, то mysql сам придумает некое имя.

Предложение Constraint NAME задает имя внешнего ключа явным образом. Задав имя ключа в последствии, если вы захотите его удалить, вы сможете это сделать с помощью alter table Tab drop foreign key NAME .

Так же ключевое слово constraint необходимо для некоторой совместимости со стандартами SQL. Например в mysql с помощью него так же можно объявить CHECK ограничение, которое по стандартам SQL должно накладывать ограничения на поле, например, что его значение должно быть больше нуля. Правда MySQL не поддерживает проверку таких ограничений, но синтаксис их создания за ошибку не считает, для совместимости с другими СУБД.

SQL ADD CONSTRAINT Ключевое слово

Команда ADD CONSTRAINT используется для создания ограничения после того, как таблица уже создана.

Следующий SQL добавляет ограничение с именем «PK_Person», которое является ограничением первичного ключа для нескольких столбцов (ID и фамилия):

Пример

ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);

DROP CONSTRAINT — Удалить ограничение

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

Удалить уникальное ограничение

Чтобы удалить уникальное ограничение, используйте следующий SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
ALTER TABLE Persons
DROP INDEX UC_Person;

Удалить ограничение первичного ключа

Чтобы удалить ограничение первичного ключа, используйте следующий SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT PK_Person;
ALTER TABLE Persons
DROP PRIMARY KEY;

Удалить ограничения внешнего ключа

Чтобы удалить ограничение внешнего ключа, используйте следующий SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

Удалить ограничение проверки

Чтобы удалить ограничение проверки, используйте следующий SQL:

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;

Мы только что запустили
SchoolsW3 видео

курс сегодня!

Сообщить об ошибке

Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:

Ваше предложение:

Спасибо Вам за то, что помогаете!

Ваше сообщение было отправлено в SchoolsW3.

ТОП Учебники
ТОП Справочники
ТОП Примеры

SchoolsW3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.

Unique Constraints MySQL

Unique Constraints — это одно поле или комбинация полей, которые определяют уникальную запись. Некоторые из полей могут содержать нулевые значения, если комбинация значений уникальна.

В чем разница между Unique Constraints и Primary Key?

Primary Key
Поля, которые являются частью первичного ключа, не могут содержать значение Null.
Unique Constraints
Некоторые из полей, которые являются частью уникального ограничения, могут содержать значения Null, если комбинация значений уникальна.

Создание Unique Constraint c использованием оператора CREATE TABLE

Синтаксис для создания уникального ограничения с использованием оператора CREATE TABLE в MySQL:

CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
.

CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, . uc_col_n)
);

Параметры или аргументы

table_name — имя таблицы, которую вы хотите создать.
column1 , column2 — столбцы, которые вы хотите создать в таблице.
constraint_name — имя уникального ограничения.
uc_col1 , uc_col2 , . uc_col_n — столбцы, которые составляют уникальное ограничение.

Пример

Рассмотрим пример создания уникального ограничения в MySQL с помощью оператора CREATE TABLE.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/