Делаю список друзей для своей небольшой соцсети. Для этого решил сделать связь многие ко многим, но у меня не получилось. В Mysql WorkBench, когда создаешь такую связь, он не ругается. А когда вношу изменения, всплывает ошибка 1215.
Таблица юзеров:
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nickname` varchar(45) NOT NULL,
`pass_hash` varchar(80) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `nickname_UNIQUE` (`nickname`)
) ENGINE=MyISAM AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8;
Создание таблицы друзей:
Executing:
CREATE TABLE `social`.`new_table` (
`id1` INT(11) NOT NULL,
`id2` INT(11) NOT NULL,
INDEX `foreign1_idx` (`id1` ASC, `id2` ASC),
CONSTRAINT `foreign1`
FOREIGN KEY (`id1` , `id2`)
REFERENCES `social`.`users` (`id` , `id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;
ERROR 1215: Cannot add foreign key constraint
SQL Statement:
CREATE TABLE `social`.`new_table` (
`id1` INT(11) NOT NULL,
`id2` INT(11) NOT NULL,
INDEX `foreign1_idx` (`id1` ASC, `id2` ASC),
CONSTRAINT `foreign1`
FOREIGN KEY (`id1` , `id2`)
REFERENCES `social`.`users` (`id` , `id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
Operation failed: There was an error while applying the SQL script to the database.
Что я делаю не так? Можете предлагать свои варианты реализации, если через этот никак.
Вопрос закрыт. Вместо 1-го foreign key, который соединяет user.id с friendlist.id1 и friendlist.id2, нужно было создать 2 разных foreign key:
CREATE TABLE `friendlist` (
`id1` int(11) NOT NULL,
`id2` int(11) NOT NULL,
KEY `foreign1_idx` (`id1`),
KEY `foreign_name2_idx` (`id2`),
CONSTRAINT `foreign1` FOREIGN KEY (`id1`) REFERENCES `users` (`id`) ON
DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `foreign2` FOREIGN KEY (`id2`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Спасибо пользователю Sergey Moiseenko за ответ.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости