На этот вопрос уже есть ответ:
Привет, я видел этот заголовок тысячи раз здесь, но все же я не мог найти ответ, соответствующий этому. Извините, если я просто незнаю или так.
Давайте получим две таблицы:
CREATE TABLE `TableA` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `string_key` (`string_key`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `TableB` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`referring_string_key` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `referring_string_key` (`referring_string_key`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Создание FK не выполняется. Невозможно добавить ограничение внешнего ключа . (ничего больше)
ALTER TABLE `TableB`
ADD FOREIGN KEY (`referring_string_key`) REFERENCES `TableA` (`string_key`) ON DELETE SET NULL ON UPDATE CASCADE;
Что ж ..
- Обе таблицы - innoDb с одинаковой сортировкой
- Оба столбца имеют одинаковый тип данных (
varchar(256) default null
)
- Оба столбца имеют одинаковую сортировку
- Индексы, установленные с обеих сторон (не работают, даже если индекс TableA.string_key не уникален)
- Не работает даже при настройке любой комбинации событий обновления / удаления
- Таблицы пусты.
Что мне не хватает? Или просто невозможно создать FK между двумя переменными с нулевым значением varchars?
Благодарю вас в andvace.
mysql,foreign-keys,innodb,mysql,