Для чого потрібен constraint name в mysql stack overflow російською

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

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

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

відповідь дан 19 Березня '16 о 12:19

Якщо Ви питаєте з причини, що ці constraints заважають Вам виконувати дії з імпорту / експорту даних, то їх можна відключити на час виполененія скриптів:

SET FOREIGN_KEY_CHECKS = 0; вимикає

відповідно SET FOREIGN_KEY_CHECKS = 1; включає перевірку зовнішніх ключів.

Однак це небезпечно з точки зору цілісності даних. Зазвичай помилка зовнішніх ключів виникає, коли порушений порядок вставки таблиць. Наприклад, вставляється таблиця міст, де зовнішній ключ вказує на країну (кожне місто належить якійсь країні), але при цьому таблиці країн ще не існує.

Як я вже говорив, на свій страх і ризик Ви можете відключити перевірку ключів на час вставки даних. Але тоді є ймовірність отримати "нічийні" дані. У випадку з містами, Ви можете отримати місто, к. Не належить жодній з країн.

відповідь дан 19 Березня '16 о 13:45