Я хочу добавить ограничение внешнего ключа в мои существующие таблицы (тип InnoDB)
У меня есть две таблицы, перечисленные ниже:
tbl_users : [ user_id(INT,AUTO_INCREMENT), user_name,--- etc]
tbl_users_meta : [ user_meta_id(INT,AUTO_INCREMENT), user_id(INT),--- etc]
Я уже создал индексИдентификатор пользователя‘на’tbl_users_meta‘ перечислено ниже :
Вот мой запрос, но я получаю (MySQL Error Code 1215:) каждый раз. В чем проблема, я могу получить его?
ALTER TABLE `tbl_users_meta`
ADD CONSTRAINT `fk users user_id`
FOREIGN KEY (`user_id`) REFERENCES
`sanskrut`.`tbl_users`(`user_id`)
ON DELETE NO ACTION ON UPDATE CASCADE;
ПОПРОБУЙТЕ тот же запрос, который вы написали с небольшой модификацией:
ALTER IGNORE TABLE `tbl_users_meta`
ADD CONSTRAINT `fk users user_id`
FOREIGN KEY (`user_id`) REFERENCES
`sanskrut`.`tbl_users`(`user_id`)
ON DELETE NO ACTION ON UPDATE CASCADE;
Надеюсь, это сработает
Я не вижу ничего плохого в том, что вы написали, поэтому, должно быть, что-то, что вы не опубликовали, влияет на проблему. Например, в версии MySQL 5.5.44 я могу успешно выполнить следующее:
CREATE DATABASE sanskrut;
USE sanskrut;
CREATE TABLE tbl_users (user_id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(50));
CREATE TABLE tbl_users_meta (user_meta_id INT AUTO_INCREMENT PRIMARY KEY, user_id INT);
CREATE INDEX user_id ON tbl_users_meta (user_id);
ALTER TABLE `tbl_users_meta`
ADD CONSTRAINT `fk users user_id`
FOREIGN KEY (`user_id`) REFERENCES
`sanskrut`.`tbl_users`(`user_id`)
ON DELETE NO ACTION ON UPDATE CASCADE;
…которая заканчивается вашим точным изложением проблемы, копируется и вставляется, и работает просто отлично.
Как я уже упоминал в комментариях, я подозреваю, что отсутствует индекс или, возможно, несоответствие типов данных. Возможно, вам будет полезно добавить вывод:
DESC tbl_users;
DESC tbl_users_meta;
SHOW indexes FROM tbl_users;
SHOW indexes FROM tbl_users_meta;
…на ваш вопрос.