Может ли первичный ключ, на который ссылается внешний ключ, быть varchar (255) в mysql?

Вопрос:

Я запустил этот запрос в mysql:

ALTER TABLE 'connections'
ADD CONSTRAINT 'connections_serial_fk'
FOREIGN KEY ('serial')
REFERENCES 'devices'(serial)
ON DELETE CASCADE;

И я получаю номер ошибки 150. Я уже искал документацию и то, что, по-моему, может вызвать эту ошибку, состоит в том, что столбец “serial” является varchar (255).

В этой ссылке говорится, что “innodb разрешает внешнему ключу ссылаться на любой индексный столбец или группу столбцов”.

У MySql есть это ограничение?

Из моей схемы:

устройства:

| Field           | Type         | Null | Key | Default | Extra          |
| serial          | varchar(255) | YES  |     | NULL    |                |

соединения:

| Field           | Type         | Null | Key | Default | Extra          |
| serial          | varchar(255) | YES  |     | NULL    |                |

Лучший ответ:

Dbms, который соответствует стандарту SQL, не позволит вам установить ссылку внешнего ключа на столбец (или столбцы), который не имеет на нем какого-либо уникального ограничения – либо PRIMARY KEY, либо UNIQUE. Но MySQL действительно допускает такую чушь при определенных обстоятельствах.

Кроме того, MySQL требует, чтобы индексированные столбцы были проиндексированы по соображениям производительности. Однако система не применяет требование, чтобы ссылочные столбцы были UNIQUE или объявлены NOT NULL. Обработка ссылок на внешние ключи к неединственным ключам или ключам, которые содержат значения NULL, недостаточно точно для операций, таких как UPDATE или DELETE CASCADE. Вам рекомендуется использовать внешние ключи, которые ссылаются только на UNIQUE (включая PRIMARY) и NOT NULL.

Внешние ключи должны ссылаться только на столбец (или столбцы), которые были объявлены либо PRIMARY KEY либо NOT NULL UNIQUE. Если вы считаете, что вам нужна ссылка на внешний ключ для незвуковой колонны или столбцов, то большой красный флаг, махнув вам в лицо, держит парень, кричащий: “У вас проблемы с дизайном!”

Оцените статью
TechArks.Ru
Добавить комментарий