внешний ключ в InnoDB

  • Автор темы Автор темы ReMaRk
  • Дата начала Дата начала

ReMaRk

Новичок
внешний ключ в InnoDB

Подскажите плиз как юзаются внешние ключи на ту же таблицу в InnoDB?
 
точно так же как и на какую-то другую, только в REFERENCES указываешь имя той же таблицы.
 
какое поле для этого использовать в таблице?
ведь первичный ключ не может быть в то же время внешним!
 
что значит какое поле использовать???
Если ты задаешь вопрос о построении внешнего ключа, то тебе виднее какие поля ты хочешь использовать?
Кто тебе мешает ссылаться на поле объявленное первичным ключем?
 
что означает такая ошибка:
Cannot add or update a child row: a foreign key constraint fails
пишет после попытке вставить запись в таблицу...
структура таблицы:
CREATE TABLE thread (
threadid int(4) unsigned NOT NULL auto_increment,
name char(64) default NULL,
down int(4) unsigned NOT NULL,
up int(4) unsigned default NULL,
PRIMARY KEY (threadid),
FOREIGN KEY (threadid) REFERENCES db00079170_5.thread (threadid) ON DELETE CASCADE
) TYPE=InnoDB;
 
а в чем глубокий смысл ссылаться на то же поле, которое к тому же является уникальным?
 
ну не знаю =), ты же и писала, что никто не мешает мне ссылаться на первичный ключ...
а глубокий смысл, что эта таблица представляет собой древовидную структуру, и при удалении записей, скажем, из узла, все дочерние удалились бы автоматически...
 
не вижу тут никакой древовидной структуры, когда уникальное поле ссылается на себя же.
 
это из алгоритма вложенных множеств структура таблицы (только там вместо down и up используется left и right соответственно)...
а на счет ссылочности вот я и не знаю какое поле сделать внешним ключем... так чтоб при удалении одной записи - все зависящие от нее были бы удалены тоже
 
а как должно быть объявлено поле, которое делается внешник ключем? not null, unique или еще каким???
 
По стандарту unique, но MySQL этого не требует, надо просто создать индекс на это поле.
Просто если у тебя само поле уникальное, и ты создаешь внешний ключ ссылающийся на это же самое поле - то смысла в этом маловато.
 
Сверху