Задавайте вопросы, мы ответим
Вы не зашли.
Пытаюсь создать в mysql таблицу "links" в базе данных "newssite":
CREATE TABLE `links` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NewsItemMainID` int(10) unsigned NOT NULL,
`NewsItemLinkID` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`),
KEY `FK_newsitemlink` (`NewsItemLinkID`),
KEY `FK_newsitemmain` (`NewsItemMainID`),
CONSTRAINT `FK_newsitemlink` FOREIGN KEY (`NewsItemLinkID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE,
CONSTRAINT `FK_newsitemmain` FOREIGN KEY (`NewsItemMainID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=cp1251;
Но она не создается, а вылазит ошибка "ERROR 1005 (HY000): Can't create table 'newssite.links' (errno: 150)"
Помогите разобраться, где ошибка! Похожие топики смотрел, но ничего путного не нашел.
Комментарий модератора:
Все возможные причины этой ошибки рассмотрены в статье:
Ошибки внешних ключей: errno 150, MySQL error 1005 и другие
Неактивен
Что говорит show innodb status; сразу после получения ошибки?
И ещё покажите show create table newsitem;
Неактивен
$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
Убедитесь, что id является индексом в таблице newsitem.
Неактивен
vasya написал:
Что говорит show innodb status; сразу после получения ошибки?
И ещё покажите show create table newsitem;
131110 14:51:18 Error in foreign key constraint of table newssite/links:
FOREIGN KEY (`NewsItemLinkID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE,
CONSTRAINT `FK_newsitemmain` FOREIGN KEY (`NewsItemMainID`) REFERENCES `newsite
m` (`ID`) ON DELETE CASCADE) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=cp1
251:
Cannot resolve table name close to:
(`ID`) ON DELETE CASCADE, CONSTRAINT `FK_newsitemmain` FOREIGN KEY (`NewsItemM
ainID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE) ENGINE=InnoDB AUTO_INCRE
MENT=13 DEFAULT CHARSET=cp1251
А таблицу newsitem я еще не создавал.
Получается, что нужно создать таблицы, а потом установить связи между ними, так?
Неактивен
"есть 1 таблица"
CREATE TABLE `links` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NewsItemMainID` int(10) unsigned NOT NULL,
`NewsItemLinkID` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`),
KEY `FK_newsitemlink` (`NewsItemLinkID`),
KEY `FK_newsitemmain` (`NewsItemMainID`),
CONSTRAINT `FK_newsitemlink` FOREIGN KEY (`NewsItemLinkID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE,
CONSTRAINT `FK_newsitemmain` FOREIGN KEY (`NewsItemMainID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=cp1251;
"есть 2 таблица"
CREATE TABLE `newsitem` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`NewsItemsTypesID` int(10) unsigned NOT NULL,
`Title` varchar(100) NOT NULL DEFAULT '',
`Body` text NOT NULL,
`Date_` datetime NOT NULL,
`HeadingID` int(10) unsigned NOT NULL,
`SubheadingID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `NewsItemTypeID` (`NewsItemsTypesID`),
KEY `FK_heading` (`HeadingID`),
KEY `FK_subheading` (`SubheadingID`),
CONSTRAINT `FK_heading` FOREIGN KEY (`HeadingID`) REFERENCES `headings` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_subheading` FOREIGN KEY (`SubheadingID`) REFERENCES `subheadings` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `NewsItemTypeID` FOREIGN KEY (`NewsItemsTypesID`) REFERENCES `newsitemstypes` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=cp1251;
Сначала выполняю код первой таблицы, после чего получаю ошибку создания...
Неактивен
Естественно он не может создать внешний ключ, так как таблицы newsitem у вас не существует.
Сначала создаете таблицы без внешних ключей, затем добавляете их с помощью alter table .. add
Неактивен
vasya написал:
Естественно он не может создать внешний ключ, так как таблицы newsitem у вас не существует.
Сначала создаете таблицы без внешних ключей, затем добавляете их с помощью alter table .. add
Помогите с кодом пожалуйста, а то я работал в admin-ке. В результате программа скомпилировала вышеприведенный код. А теперь его нужно грамотно разбить.
Неактивен
Буду пытаться и сам что-то делать...
Неактивен
Создайте сначала без внешних ключей, а затем добавьте их командами типа:
Неактивен
rgbeast написал:
Создайте сначала без внешних ключей, а затем добавьте их командами типа:
ALTER TABLE `links` ADD CONSTRAINT `FK_newsitemlink` FOREIGN KEY (`NewsItemLinkID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE;
Спасибо большое, теперь понятно. Все дело в незнании языка запросов.
Неактивен