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

ReMaRk

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

Подскажите плиз как юзаются внешние ключи на ту же таблицу в InnoDB?
 

Апельсин

Оранжевое создание
точно так же как и на какую-то другую, только в REFERENCES указываешь имя той же таблицы.
 

ReMaRk

Новичок
какое поле для этого использовать в таблице?
ведь первичный ключ не может быть в то же время внешним!
 

Апельсин

Оранжевое создание
что значит какое поле использовать???
Если ты задаешь вопрос о построении внешнего ключа, то тебе виднее какие поля ты хочешь использовать?
Кто тебе мешает ссылаться на поле объявленное первичным ключем?
 

ReMaRk

Новичок
что означает такая ошибка:
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;
 

Апельсин

Оранжевое создание
а в чем глубокий смысл ссылаться на то же поле, которое к тому же является уникальным?
 

ReMaRk

Новичок
ну не знаю =), ты же и писала, что никто не мешает мне ссылаться на первичный ключ...
а глубокий смысл, что эта таблица представляет собой древовидную структуру, и при удалении записей, скажем, из узла, все дочерние удалились бы автоматически...
 

Апельсин

Оранжевое создание
не вижу тут никакой древовидной структуры, когда уникальное поле ссылается на себя же.
 

ReMaRk

Новичок
это из алгоритма вложенных множеств структура таблицы (только там вместо down и up используется left и right соответственно)...
а на счет ссылочности вот я и не знаю какое поле сделать внешним ключем... так чтоб при удалении одной записи - все зависящие от нее были бы удалены тоже
 

ReMaRk

Новичок
а как должно быть объявлено поле, которое делается внешник ключем? not null, unique или еще каким???
 

Апельсин

Оранжевое создание
По стандарту unique, но MySQL этого не требует, надо просто создать индекс на это поле.
Просто если у тебя само поле уникальное, и ты создаешь внешний ключ ссылающийся на это же самое поле - то смысла в этом маловато.
 
Сверху