1.6.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 внешних ключей см. Раздел 13.1.18.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_SYS_FOREIGN и INNODB_SYS_FOREIGN_COLS в базе данных INFORMATION_SCHEMA.
InnoDB и NDB таблицы поддерживают внешние ключи.
© 2025 Oracle
Licensed under the GPLv2 License.