Задавайте вопросы, мы ответим
Вы не зашли.
Почитала мануалы, разобралась со смыслом внешних ключей, пошла улучшать свою базу. И в какой-то момент задумалась над несколькими моментами.
Аксиома - чтобы привязать колонку к внешнему ключу, она должна быть сама индексом
1. Если индекс, состоит из нескольких колонок, а я использую его для связи с внешним ключом, то привязывается первая колонка указанная в индексе?
2. Насколько плохо создавать индексы к колонкам где их раньше не было, чтобы связать их внешними ключами? Может имеет смысл как-то сам индекс ограничить, скажем до одного символа, это играет хоть какую-нибудь роль? Ранее там не было индекса, так как колонка при выборке не была критично важной.
Неактивен
1. Первая часть индекса может быть использована во внешнем ключе
2. Не ничего плохого в создании индекса, необходимого для FOREIGN KEY
Неактивен
rgbeast написал:
2. Не ничего плохого в создании индекса, необходимого для FOREIGN KEY
А кстати, эти индексы хранятся всё равно отдельно или их как-то склеивает движок?
Неактивен
В ссылающейся таблице индекс создастся автоматически (в неявном виде), если его нет, а если есть - будет использован. В таблице, на которую ссылается внешний ключ, индекс должен быть создан заранее.
Неактивен
rgbeast написал:
(в неявном виде)
Это как? Его не будет видно в основном списке индексов? И им не будет пользоваться оптимизатор?
Должна покаяться, я всё ещё не распрощалась с pma, а у него нету такой фишки, как "создать внешний ключ, не имея индекса", по этому создаю самый обыкновенный индекс, после чего соединяю. Не считая моего нежелания уходить от pma, есть ли какой-нибудь минус, такого подхода?
Неактивен
Прошу прощения, индекс создается явно, если нет подходящего.
Неактивен
Я за это время успела наспотыкаться о другие непонятные сущности.
1. Пытаюсь соединить с родителем колонку, которая идёт на 2+ месте в первичном индексе, но так же имеется как отдельный индекс, при удаление выбираю "SET NULL", на меня орут, что нельзя, так как поле не может быть NULL, вздыхаю, иду править настройки поля, исправила, сохранила, меняю внешний ключ - тоже самое, с 5ого раза до меня дошло, что хоть база и глотает запрос на изменения без ошибки, но атрибут колонки не меняется. Позлилась - выпилила первичный индекс, сделала такой же, но просто уникальный. Всё заработало. Я верно понимаю, что в отличии от уникального индекса, первичный не терпит NULL?
2. Совершенно непонятная логика. В одной таблице есть составной индекс, когда лезу прописывать внешний ключ, мне дают это сделать только с первой колонкой, в другой таблице, так же составной индекс, но в форме внешних ключей, можно вписывать всё, что находится в составном индексе. Я запуталась в логике мышлении движка. На картинке пример этого феномена:
Неактивен
1. PRIMARY KEY тихо делает колонку NOT NULL
2. Сформулируйте в терминах SQL.
SHOW CREATE TABLE для таблиц, а затем
ALTER TABLE .. ADD FOREIGN KEY ...
и какая ошибка получается.
Неактивен
rgbeast написал:
2. Сформулируйте в терминах SQL.
SHOW CREATE TABLE для таблиц, а затем
ALTER TABLE .. ADD FOREIGN KEY ...
и какая ошибка получается.
Неактивен
Покажите
SHOW CREATE TABLE `db`.`test`;
Совпадают ли типы info_lokal_menu.nid и test.test2?
Неактивен
rgbeast написал:
Покажите
SHOW CREATE TABLE `db`.`test`;
Совпадают ли типы info_lokal_menu.nid и test.test2?
CREATE TABLE `test` (
`test` tinyint(3) unsigned NOT NULL,
`test2` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`test`),
KEY `test2` (`test2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Неактивен
Странно, у меня получилось без ошибки. Попробуйте воспроизвести на новой чистой базе.
Неактивен
rgbeast написал:
Странно, у меня получилось без ошибки. Попробуйте воспроизвести на новой чистой базе.
Вот и я о том же, чистейший воды рандом какой-то.
Ладно, это просто зацепился мозг за не понимание, но проблемы в этом нету.
А вот в чём проблема может возникнуть. Есть три таблицы и их связи по внешним ключам.
Неактивен
Непонятно в чем может быть проблема - удалится последовательно все, что нужно.
Неактивен