I need to create the database schema and include it in my software requirements specification for my school project, however, when I try to create a relationship between 2 tables, I get Error: Missing index on column(s).
asked Mar 4, 2018 at 10:41
2
I think @HazarathChillara has this right; you need to create primary, unique, or index keys.
You said every table has an primary key, but did you make each foreign and referenced key an index as well? It sounds like you neglected to properly set up your table structure; I only get the error when I don’t have a primary key or index on the particular columns I’m working with.
«MySQL requires indexes on foreign keys and referenced keys so that foreign key checks can be fast and not require a table scan»
You can just put an INDEX on the foreign key (often my referenced key is a primary key anyway, so I don’t need any additional key on that column).
answered Mar 13, 2018 at 13:43
Isaac BennetchIsaac Bennetch
11.7k2 gold badges32 silver badges43 bronze badges
As Usman Khan said you have to go to the structure tab of the particular table and clicked on more options and select ‘INDEX’ for the foreign key.
the below image will help you how to do it
Josef
2,7792 gold badges22 silver badges23 bronze badges
answered May 9, 2021 at 7:14
I think i have another simple solve,
thing is, phpMyAdmin wont allow the addition of foreign keys to an already available data entry, so here is the my simple solve,
1. ensure to backup your database
2. confirm that your data was backed-up securely, recommended Offline backups
4. delete all data entries in all tables that will be part of the new relationship.
5. now Create the relevant relationships.
6. be sure you have created all required and preferred relations to avoid the need to
export data again
answered May 20, 2021 at 13:46
1
-
MySQL
В чём суть этой проблемы?
При создании ссылки выдает ошибку: отсутствует индекс в столбце. Что не так?
Пытаюсь привязать id таблицы users и user_id таблицы calculation.
-
Вопрос заданболее трёх лет назад
-
131 просмотр
2
комментария
-
мой вам совет, читайте документацию
Решения вопроса 1
В общем. Нужно-было просто добавить индексированный ключ и вуаля
Комментировать
Пригласить эксперта
Похожие вопросы
-
Показать ещё
Загружается…
10 июн. 2023, в 01:43
6500 руб./за проект
10 июн. 2023, в 00:17
5000 руб./за проект
09 июн. 2023, в 23:05
80000 руб./за проект
Минуточку внимания
Мне нужно создать схему базы данных и включить ее в мою спецификацию требований к программному обеспечению для моего школьного проекта, однако, когда я пытаюсь создать связь между двумя таблицами, я получаю сообщение об ошибке: отсутствует индекс в столбце (ах).
2 ответа
Лучший ответ
Я думаю, что @HazarathChillara имеет на это право; вам необходимо создать первичный, уникальный или индексный ключи.
Вы сказали, что каждая таблица имеет первичный ключ, но сделали ли вы каждый внешний ключ и ключ, на который есть ссылка, также индексом? Похоже, вы не позаботились о правильной настройке структуры своей таблицы; Я получаю сообщение об ошибке только в том случае, если у меня нет первичного ключа или индекса для конкретных столбцов, с которыми я работаю.
«MySQL требует индексов внешних ключей и связанных ключей, поэтому проверка внешнего ключа может быть быстрой и не требует сканирования таблицы «
Вы можете просто поместить ИНДЕКС на внешний ключ (часто мой ссылочный ключ в любом случае является первичным ключом, поэтому мне не нужен дополнительный ключ в этом столбце).
8
Isaac Bennetch
13 Мар 2018 в 13:43
Эта ошибка появляется только в том случае, если вы пренебрегаете структурой таблицы. Убедитесь, что вы также проиндексировали внешний ключ. вы можете увидеть, что я отметил, как я могу выбрать свой внешний ключ в качестве индекса. На этом изображении я индексирую выбранный , ‘sr’ мой внешний ключ
2
usman khan
10 Сен 2018 в 07:06
Я думаю, что у Хисаратхиллара это право; вам нужно создать первичные, уникальные или индексные ключи.
Вы сказали, что в каждой таблице есть первичный ключ, но вы также указали каждый иностранный и ссылочный ключ? Похоже, вы пренебрегли должным образом настроите свою структуру таблицы; Я получаю ошибку только в том случае, если у меня нет первичного ключа или индекса для конкретных столбцов, с которыми я работаю.
» MySQL требует индексов для внешних ключей и ссылочных ключей, чтобы проверки внешнего ключа могли быть быстрыми и не требовать сканирования таблицы «
Вы можете просто поместить ИНДЕКС на внешний ключ (часто мой ссылочный ключ — это первичный ключ, так что мне не нужен дополнительный ключ в этом столбце).
Я создаю 2 таблицы в своей базе данных:
DROP TABLE IF EXISTS `med_pharmacy`;
CREATE TABLE IF NOT EXISTS `med_pharmacy` (
`med_pharmacy_id` int(11) NOT NULL AUTO_INCREMENT,
`med_id` int(11) NOT NULL,
`med_barcode` varchar(45) DEFAULT NULL,
`med_received` date DEFAULT NULL,
`med_expiry` date DEFAULT NULL,
`med_tablet` int(11) DEFAULT NULL,
`med_pill` int(11) DEFAULT NULL,
`clinic_id` varchar(45) DEFAULT NULL,
PRIMARY KEY (`med_pharmacy_id`),
KEY `fk_med_pharmacy_medication1_idx` (`med_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1261 DEFAULT CHARSET=utf8mb4;
И:
DROP TABLE IF EXISTS `medication`;
CREATE TABLE `medication` (
`med_id` int(11) NOT NULL,
`med_name` varchar(75) NOT NULL,
`med_date_added` date DEFAULT NULL,
`clinic_id` varchar(45) DEFAULT NULL,
`med_type` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
И когда я запускаю запросы в wamp, я получил эту ошибку:
SQL-запрос:
ALTER TABLE `med_pharmacy`
ADD CONSTRAINT `fk_med_pharmacy_medication1`
FOREIGN KEY (`med_id`)
REFERENCES
`medication` (`med_id`) ON DELETE CASCADE ON UPDATE CASCADE MySQL
сказал: Документация
# 1822 — Не удалось добавить константу внешнего ключа. Отсутствует индекс для ограничения ‘fk_med_pharmacy_medication1’ в указанной таблице ‘лекарство’
Таблицы уже существуют, но я изменил одно поле.