powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / error 1005 (создание FK) да снова эта ошибка где искать причину?
7 сообщений из 7, страница 1 из 1
error 1005 (создание FK) да снова эта ошибка где искать причину?
    #38323314
TrogWar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Есть две таблицы (смысл:"У товара есть цвет и он описан в отдельной таблице"):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
use `tmp`;

DROP TABLE IF EXISTS `colors`; 
CREATE TABLE `colors` ( 
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`name` varchar(255) NOT NULL, 
PRIMARY KEY (`id`), 
INDEX (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `products`; 
CREATE TABLE `products` ( 
`id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
`color` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
INDEX (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



А вот и сам запрос с освоей ошибкой:
Код: sql
1.
2.
ALTER TABLE `products` ADD CONSTRAINT `colors` FOREIGN KEY (`id`) REFERENCES `products`(`color`);
Can't create table 'tmp.#sql-311_4c1' (errno: 150)



Почитал мануалы, SO и данный форум:
– Типы как столбцов так и самих таблиц совпадают
– Индексы созданы заранее
Эту тему тоже читал

В чём проблема? И как решить?

Спасибо!
...
Рейтинг: 0 / 0
error 1005 (создание FK) да снова эта ошибка где искать причину?
    #38323318
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`color` int(11) NOT NULL,
найди 10 отличий
...
Рейтинг: 0 / 0
error 1005 (создание FK) да снова эта ошибка где искать причину?
    #38323339
TrogWar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowавтор`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`color` int(11) NOT NULL,
найди 10 отличий
А как тогда в таблице `colors` оставить автоинкремент и связать её с полем `color` таблицы `products` если в этом поле может как угодно и где угодно быть любое существующее из `colors`.`id` значение?
...
Рейтинг: 0 / 0
error 1005 (создание FK) да снова эта ошибка где искать причину?
    #38323343
unsigned2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TrogWar,

unsigned !
...
Рейтинг: 0 / 0
error 1005 (создание FK) да снова эта ошибка где искать причину?
    #38323350
TrogWar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавление: разницу с "unsigned" вижу, прошу простить – опечатка в посте (в базе unsigned у всех int полей).

Ок, попробуем без автоинкремента:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE `colors` (
  `id` int(11) unsigned NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`),
  KEY `id_2` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `products` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `color` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `products` ADD CONSTRAINT `colors` FOREIGN KEY (`id`) REFERENCES `products`(`color`);


Ошибка в запросe (1005): Can't create table 'tmp.#sql-311_4e9' (errno: 150)
...
Рейтинг: 0 / 0
error 1005 (создание FK) да снова эта ошибка где искать причину?
    #38323353
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogWar,

назовите констрейнт по-другому. Да и определён он должен быть наоборот, судя по названиям полей...
...
Рейтинг: 0 / 0
error 1005 (создание FK) да снова эта ошибка где искать причину?
    #38323364
TrogWar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура, спасибо, tanglir, то что нужно.

Рабочий код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DROP TABLE IF EXISTS `colors`;
CREATE TABLE `colors` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `products`;

CREATE TABLE `products` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `color` int(11) unsigned,
  PRIMARY KEY (`id`),
  CONSTRAINT `colors` FOREIGN KEY (`color`) REFERENCES `colors`(`id`)
  ON UPDATE CASCADE
  ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



ps: знать бы ещё как пометить тему "решено" если редактировать самому свой пост нельзя.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / error 1005 (создание FK) да снова эта ошибка где искать причину?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]