У меня проблема, когда я пытаюсь заполнить свои светильники. У меня 2 стола (клиент и партнер).

CREATE TABLE `partner` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `client_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `client_id` (`client_id`),
  CONSTRAINT `partner_ibfk_3` FOREIGN KEY (`client_id`) REFERENCES `client` 
  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `client` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `partner_id` tinyint(3) unsigned DEFAULT NULL,
  `partner_ref` varchar(7) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `partner_ref` (`partner_ref`,`partner_id`),
  KEY `partner_id` (`partner_id`),
  CONSTRAINT `client_ibfk_1` FOREIGN KEY (`partner_id`) REFERENCES `partner` 
  (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=667305 DEFAULT CHARSET=utf8 PACK_KEYS=0;

Когда я запускаю свои приборы, у меня возникает такая проблема:

ОШИБКА 1215 (HY000) в строке 863: невозможно добавить ограничение внешнего ключа

Я предположил, что это потому, что когда создается таблица «партнер», таблица «клиент» не так, поэтому внешний ключ не найден.

Однако если я изменюсь и поставлю «клиент» перед «партнером», проблема останется прежней.

Спасибо за вашу помощь !

1
N.Jourdan 12 Дек 2017 в 17:04

1 ответ

Лучший ответ

Я нашел решение:

Я удалил ограничение при создании «партнера» и добавил это ограничение после создания «клиента» с помощью ALTER TABLE:

CREATE TABLE `partner` (
  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `client_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `client_id` (`client_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `client` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `partner_id` tinyint(3) unsigned DEFAULT NULL,
  `partner_ref` varchar(7) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `partner_ref` (`partner_ref`,`partner_id`),
  KEY `partner_id` (`partner_id`),
  CONSTRAINT `client_ibfk_1` FOREIGN KEY (`partner_id`) REFERENCES `partner` 
  (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=667305 DEFAULT CHARSET=utf8 PACK_KEYS=0;

ALTER TABLE `partner`
ADD CONSTRAINT `partner_ibfk_3` FOREIGN KEY (`client_id`) REFERENCES 
`client` (`id`);
1
N.Jourdan 12 Дек 2017 в 14:24