SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.11.2013 15:28:18

novator_
Участник
Зарегистрирован: 06.11.2013
Сообщений: 6

Ошибка при создании таблицы

Пытаюсь создать в 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 и другие

Неактивен

 

#2 10.11.2013 15:38:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка при создании таблицы

Что говорит show innodb status; сразу после получения ошибки?

И ещё покажите show create table newsitem;

Неактивен

 

#3 10.11.2013 15:52:56

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Ошибка при создании таблицы

$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

Убедитесь, что id является индексом в таблице newsitem.

Неактивен

 

#4 10.11.2013 15:56:23

novator_
Участник
Зарегистрирован: 06.11.2013
Сообщений: 6

Re: Ошибка при создании таблицы

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 я еще не создавал.

Получается, что нужно создать таблицы, а потом установить связи между ними, так?

Неактивен

 

#5 10.11.2013 16:06:40

novator_
Участник
Зарегистрирован: 06.11.2013
Сообщений: 6

Re: Ошибка при создании таблицы

"есть 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;

Сначала выполняю код первой таблицы, после чего получаю ошибку создания...

Неактивен

 

#6 10.11.2013 16:20:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка при создании таблицы

Естественно он не может создать внешний ключ, так как таблицы newsitem у вас не существует.
Сначала создаете таблицы без внешних ключей, затем добавляете их с помощью alter table .. add

Неактивен

 

#7 10.11.2013 16:22:17

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка при создании таблицы

Примеры есть в FAQ №4

Неактивен

 

#8 10.11.2013 16:24:20

novator_
Участник
Зарегистрирован: 06.11.2013
Сообщений: 6

Re: Ошибка при создании таблицы

vasya написал:

Естественно он не может создать внешний ключ, так как таблицы newsitem у вас не существует.
Сначала создаете таблицы без внешних ключей, затем добавляете их с помощью alter table .. add

Помогите с кодом пожалуйста, а то я работал в admin-ке. В результате программа скомпилировала вышеприведенный код. А теперь его нужно грамотно разбить.

Неактивен

 

#9 10.11.2013 16:25:43

novator_
Участник
Зарегистрирован: 06.11.2013
Сообщений: 6

Re: Ошибка при создании таблицы

Буду пытаться и сам что-то делать...

Неактивен

 

#10 10.11.2013 16:29:25

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Ошибка при создании таблицы

Создайте сначала без внешних ключей, а затем добавьте их командами типа:

ALTER TABLE `links` ADD CONSTRAINT `FK_newsitemlink` FOREIGN KEY (`NewsItemLinkID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE;

Неактивен

 

#11 10.11.2013 16:41:28

novator_
Участник
Зарегистрирован: 06.11.2013
Сообщений: 6

Re: Ошибка при создании таблицы

rgbeast написал:

Создайте сначала без внешних ключей, а затем добавьте их командами типа:

ALTER TABLE `links` ADD CONSTRAINT `FK_newsitemlink` FOREIGN KEY (`NewsItemLinkID`) REFERENCES `newsitem` (`ID`) ON DELETE CASCADE;

Спасибо большое, теперь понятно. Все дело в незнании языка запросов.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson