SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.04.2015 15:43:13

magnuz
Участник
Зарегистрирован: 08.04.2015
Сообщений: 4

Внешний ключ на саму себя

Таблица group со структурой: id, name, parent
При попытке связать поле parent c id

ALTER TABLE `tdb_group`
ADD CONSTRAINT `key_group_parent` FOREIGN KEY ( `parent` )
REFERENCES `tdb_group` (`id`)
ON DELETE CASCADE ON UPDATE RESTRICT

(1005: Can't create table 'dbmantest.#sql-968_b' (errno: 150))


Комментарий модератора:
Все возможные причины возникновения ошибок внешних ключей рассмотрены в статье:
Ошибки внешних ключей: errno 150, MySQL error 1005 и другие

Неактивен

 

#2 08.04.2015 15:51:37

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Внешний ключ на саму себя

$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

Попробовал воспроизвести, ошибки нет:


mysql> CREATE TABLE `tdb_group` (id int PRIMARY KEY, parent int);
Query OK, 0 rows affected (0.62 sec)

mysql> ALTER TABLE `tdb_group`
    -> ADD CONSTRAINT `key_group_parent` FOREIGN KEY ( `parent` )
    -> REFERENCES `tdb_group` (`id`)
    -> ON DELETE CASCADE ON UPDATE RESTRICT;
Query OK, 0 rows affected (1.07 sec)
Records: 0  Duplicates: 0  Warnings: 0


У Вас есть индекс на id?

Неактивен

 

#3 08.04.2015 15:53:50

magnuz
Участник
Зарегистрирован: 08.04.2015
Сообщений: 4

Re: Внешний ключ на саму себя

rgbeast написал:

$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

Попробовал воспроизвести, ошибки нет:


mysql> CREATE TABLE `tdb_group` (id int PRIMARY KEY, parent int);
Query OK, 0 rows affected (0.62 sec)

mysql> ALTER TABLE `tdb_group`
    -> ADD CONSTRAINT `key_group_parent` FOREIGN KEY ( `parent` )
    -> REFERENCES `tdb_group` (`id`)
    -> ON DELETE CASCADE ON UPDATE RESTRICT;
Query OK, 0 rows affected (1.07 sec)
Records: 0  Duplicates: 0  Warnings: 0


У Вас есть индекс на id?

Вроде есть.

Неактивен

 

#4 08.04.2015 16:08:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Внешний ключ на саму себя

Покажите

SHOW CREATE TABLE `tdb_group`;

Неактивен

 

#5 08.04.2015 16:10:49

magnuz
Участник
Зарегистрирован: 08.04.2015
Сообщений: 4

Re: Внешний ключ на саму себя

vasya написал:

Покажите

SHOW CREATE TABLE `tdb_group`;

CREATE TABLE `tdb_group` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`parent` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `parent` (`parent`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

Неактивен

 

#6 08.04.2015 16:15:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Внешний ключ на саму себя

типы id и parent должны совпадать, а у вас  bigint(20) и int(11)
нужно или у id сделать int(11)
или
у parent bigint(20)

Неактивен

 

#7 08.04.2015 16:24:32

magnuz
Участник
Зарегистрирован: 08.04.2015
Сообщений: 4

Re: Внешний ключ на саму себя

vasya написал:

типы id и parent должны совпадать, а у вас  bigint(20) и int(11)
нужно или у id сделать int(11)
или
у parent bigint(20)

ok спасибо

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson