Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
FOREIGN KEYS в MySQL для таблиц "InnoDB" (Сергей) 08/05/2004 - 19:20:42
      Re: FOREIGN KEYS в MySQL для таблиц (Marat_L) 10/05/2004 - 08:19:05

> Original message text:
> From: Сергей - 08/05/2004 - 19:20:42
> Subject:FOREIGN KEYS в MySQL для таблиц "InnoDB"
> -----------------
> Есть таблица:
>
> CREATE TABLE `s_obj_to_obj` (
> `PARENT_TYPE_ID` int(11) NOT NULL,
> `PARENT_ID` int(11) NOT NULL,
> `CHILD_TYPE_ID` int(11) NOT NULL,
> `CHILD_ID` int(11) NOT NULL,
> `POS1` int(11) default NULL,
> `LEVEL1` int(11) default NULL,
> `PAGE_ID` int(11) default NULL,
> PRIMARY KEY (`PARENT_TYPE_ID`,`PARENT_ID`,`CHILD_TYPE_ID`,`CHILD_ID`)
> ) TYPE=InnoDB;
>
> Необходимо сделать ссылочные ключи на первичный ключ (ключ состоит из 2х полей OBJ_TYPE_ID и PKEY) другой таблицы следующим образом:
>
> S_OBJ_TO_OBJ.PARENT_TYPE_ID -> A_SIMPLE.OBJ_TYPE_ID
> S_OBJ_TO_OBJ.PARENT_ID -> A_SIMPLE.PKEY
>
> и
>
> S_OBJ_TO_OBJ.CHILD_TYPE_ID -> A_SIMPLE.OBJ_TYPE_ID
> S_OBJ_TO_OBJ.CHILD_ID -> A_SIMPLE.PKEY
>
> sql-скрипт будет:
>
> ALTER TABLE S_OBJ_TO_OBJ ADD CONSTRAINT FK_S_OBJ_TO_OBJ00 FOREIGN KEY (PARENT_TYPE_ID, PARENT_ID) REFERENCES A_SIMPLE (OBJ_TYPE_ID, PKEY) ON DELETE CASCADE ON UPDATE CASCADE;
>
> ALTER TABLE S_OBJ_TO_OBJ ADD CONSTRAINT FK_S_OBJ_TO_OBJ01 FOREIGN KEY (CHILD_TYPE_ID, CHILD_ID) REFERENCES A_SIMPLE (OBJ_TYPE_ID, PKEY) ON DELETE CASCADE ON UPDATE CASCADE;
>
> после выполнения 1-й "ALTER" срабатывает, на втором выдается:
>
> #1005 - Can't create table '.\kernel35\#sql-4e8_20e.frm' (errno: 150)
>
> Изменил структуру S_OBJ_TO_OBJ:
>
> первичный ключ: поля PARENT_TYPE_ID и PARENT_ID
> а на поля CHILD_TYPE_ID и CHILD_ID поставил индексы
>
> Задаю внешне ключи:
>
> ALTER TABLE S_OBJ_TO_OBJ ADD CONSTRAINT FK_S_OBJ_TO_OBJ00 FOREIGN KEY (PARENT_TYPE_ID, PARENT_ID) REFERENCES A_SIMPLE (OBJ_TYPE_ID, PKEY) ON DELETE CASCADE ON UPDATE CASCADE -выполняется
>
> ALTER TABLE S_OBJ_TO_OBJ ADD CONSTRAINT FK_S_OBJ_TO_OBJ01 FOREIGN KEY ( CHILD_TYPE_ID ) REFERENCES A_SIMPLE( OBJ_TYPE_ID ) ON DELETE CASCADE ON UPDATE CASCADE - выполняется
>
> ALTER TABLE S_OBJ_TO_OBJ ADD CONSTRAINT FK_S_OBJ_TO_OBJ01 FOREIGN KEY ( CHILD_ID ) REFERENCES A_SIMPLE ( PKEY ) ON DELETE CASCADE ON UPDATE CASCADE - выдает то же самое сообщение.
>
> Подскажите, пожалуйста, в чем ошибка? В двух или более связях/ограничениях может использоваться один и тот же индекс?
>


From: Marat_L - 10/05/2004 - 08:19:05
Subject:FOREIGN KEYS в MySQL для таблиц
-----------------
1)
>Подскажите, пожалуйста, в чем ошибка? В двух или более
>связях/ограничениях может использоваться один и тот же индекс?

Может

2)
>ALTER TABLE S_OBJ_TO_OBJ ADD CONSTRAINT FK_S_OBJ_TO_OBJ01
>FOREIGN KEY ( CHILD_ID ) REFERENCES A_SIMPLE ( PKEY ) ON DELETE
>CASCADE ON UPDATE CASCADE - выдает то же самое сообщение.

Если индексы S_OBJ_TO_OBJ.CHILD_ID и A_SIMPLE.PKEY существуют, то остается одно -они должны иметь одинаковый тип.


Встречный вопрос:

>ALTER TABLE S_OBJ_TO_OBJ ADD CONSTRAINT FK_S_OBJ_TO_OBJ00
>FOREIGN KEY (PARENT_TYPE_ID, PARENT_ID) REFERENCES A_SIMPLE
>(OBJ_TYPE_ID, PKEY) ON DELETE CASCADE ON UPDATE CASCADE -
>выполняется

А сможешь объяснить смысл такой связи?


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
14596



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |