1.7.3.2 Ограничения FOREIGN KEY
Внешние ключи позволяют вам осуществлять кросс-ссылку на связанные данные в разных таблицах и помогают поддерживать согласованность этих разбросанных данных.
MySQL поддерживает ON UPDATE и ON
DELETE внешние ключи в CREATE TABLE и ALTER TABLE операторах. Доступные действия с ссылками — RESTRICT, CASCADE, SET NULL и NO ACTION (по умолчанию).
SET DEFAULT также поддерживается сервером MySQL, но в настоящее время отклоняется как недопустимое InnoDB. Поскольку MySQL не поддерживает отложенную проверку ограничений, NO
ACTION обрабатывается как RESTRICT. Для получения точного синтаксиса, поддерживаемого MySQL для внешних ключей, обратитесь к Раздел 15.1.20.5, «Ограничения FOREIGN KEY».
MATCH FULL, MATCH
PARTIAL и MATCH SIMPLE разрешены, но их использование следует избегать, так как они заставляют сервер MySQL игнорировать любой ON DELETE или ON UPDATE клаузу, используемую в том же операторе. MATCH опции не имеют других эффектов в MySQL, что фактически навязывает MATCH
SIMPLE семантику постоянно.
MySQL требует, чтобы столбцы внешнего ключа были индексированы; если вы создаёте таблицу с ограничением внешнего ключа, но без индекса на заданном столбце, индекс создаётся.
Вы можете получить информацию о внешних ключах из таблицы схемы данных KEY_COLUMN_USAGE. Здесь показан пример запроса к этой таблице:
mysql> SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME
> FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
> WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
+--------------+---------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME |
+--------------+---------------+-------------+-----------------+
| fk1 | myuser | myuser_id | f |
| fk1 | product_order | customer_id | f2 |
| fk1 | product_order | product_id | f1 |
+--------------+---------------+-------------+-----------------+
3 rows in set (0.01 sec)
Информация о внешних ключах в таблицах InnoDB также может быть найдена в таблицах INNODB_FOREIGN и INNODB_FOREIGN_COLS в базе данных INFORMATION_SCHEMA.
InnoDB и NDB таблицы поддерживают внешние ключи.
© 2025 Oracle
Licensed under the GPLv2 License.