Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Таблица с внешним ключом на себя


Автор: _nIx_ 7.5.2007, 15:05
В общем такая вот таблица(взята из учебника) не хочет создаваться... 
Код

CREATE TABLE catalog (
   id_catalog INT(8) NOT NULL AUTO_INCREMENT,
   name TINYTEXT NOT NULL,
   description TINYTEXT NOT NULL,
   pos SMALLINT(3) NOT NULL default '0',
   hide ENUM('show', 'hide') NOT NULL DEFAULT 'show',
   id_parent INT(8) NOT NULL DEFAULT '0',
   PRIMARY KEY(id_catalog),
   FOREIGN KEY(id_parent) REFERENCES catalog(id_parent)
) TYPE = INNODB;

Мне кажется,из-за того что нельзя ставить внешний ключ на таблицу,которая еще не создана... Как выйти из ситуации?  smile 

Автор: Glip 7.5.2007, 15:34
можно попробовать сначала сделать без парент а потом добавить через alter table
или почитать на предмет транзакций.

Автор: _nIx_ 7.5.2007, 17:07
Попробовал сначала добавить данные,на которые будут ссылаца внешние ключи в последствии,затем добавление 
Код

ALTER TABLE catalog3 ADD FOREIGN KEY (id_parent) REFERENCES catalog3(id_parent);

все равно выдает ошибку...  smile  smile 

Автор: Kesh 7.5.2007, 17:47
Это в каком учебнике было...
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
Вот тут внешние ключи только на другие таблицы ссылаются, да и то, куча ограничений...

Автор: Glip 7.5.2007, 17:52
Цитата(_nIx_ @  7.5.2007,  17:07 Найти цитируемый пост)
Попробовал сначала добавить данные,на которые будут ссылаца внешние ключи в последствии,затем добавление 

нет, а если пустую таблицу. только поле парента не создавать сразу а потом добавить?

это со страницы по ссылке Kesh
Цитата

Remember to create the required indexes first. You can also add a self-referential foreign key constraint to a table using ALTER TABLE.


то есть 
Код

CREATE TABLE catalog (
   id_catalog INT(8) NOT NULL AUTO_INCREMENT,
   name TINYTEXT NOT NULL,
   description TINYTEXT NOT NULL,
   pos SMALLINT(3) NOT NULL default '0',
   hide ENUM('show', 'hide') NOT NULL DEFAULT 'show',
   id_parent INT(8) NOT NULL DEFAULT '0',
   PRIMARY KEY(id_catalog),
) TYPE = INNODB;

ALTER TABLE catalog ADD FOREIGN KEY (id_parent) REFERENCES catalog(id_catalog);

Автор: Glip 7.5.2007, 18:13
Цитата(_nIx_ @  7.5.2007,  17:07 Найти цитируемый пост)


Код

ALTER TABLE catalog3 ADD FOREIGN KEY (id_parent) REFERENCES catalog3(id_parent);

все равно выдает ошибку...     


правильно, потому что не REFERENCES catalog3(id_parent); a REFERENCES catalog3(id_catalog);

Автор: _nIx_ 7.5.2007, 22:11
Все,разобралься,всем спасибо....  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)