|
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
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 - выдает то же самое сообщение.
Подскажите, пожалуйста, в чем ошибка? В двух или более связях/ограничениях может использоваться один и тот же индекс?
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
14596
|
|