Ошибка внешнего ключа - PullRequest
2 голосов
/ 20 марта 2012

Хорошо, поэтому я пытался выяснить, почему я продолжаю получать эту конкретную ошибку.MySql продолжает давать мне код ошибки 1452. Невозможно добавить или обновить дочернюю строку.Мои таблицы как таковые.

CREATE  TABLE IF NOT EXISTS `ecommerce`.`departments` (
 `id` INT NOT NULL AUTO_INCREMENT ,
 `name` VARCHAR(100) NOT NULL ,
 PRIMARY KEY (`id`) )
ENGINE = MyISAM;

INSERT INTO `ecommerce`.`departments`
VALUES (1, 'Development'), (2, 'Marketing'),
       (3, 'Sales'), (4, 'Customer Service');

CREATE  TABLE IF NOT EXISTS `ecommerce`.`department_roles` (
 `id` INT NOT NULL AUTO_INCREMENT ,
 `name` VARCHAR(100) NOT NULL ,
 `map` VARCHAR(255) NOT NULL ,
 `parent_id` INT NOT NULL ,
 PRIMARY KEY (`id`) )
ENGINE = MyISAM;

INSERT INTO `ecommerce`.`department_roles`
VALUES (1, 'Admin', '/admin', 0), (2, 'Create', '/admin', 1),
       (3, 'Update', '/admin', 1), (4, 'Delete', '/admin', 1);

CREATE  TABLE IF NOT EXISTS `ecommerce`.`department_roles_map` (
 `id` INT NOT NULL AUTO_INCREMENT ,
 `department_roles_id` INT NOT NULL ,
 `departments_id` INT NOT NULL ,
 PRIMARY KEY (`id`) ,
 INDEX `fk_drm_departments` (`departments_id` ASC) ,
 INDEX `fk_drm_department_roles` (`department_roles_id` ASC) ,
 CONSTRAINT `fk_drm_departments`
  FOREIGN KEY (`departments_id` )
  REFERENCES `ecommerce`.`departments` (`id` )
  ON DELETE CASCADE
  ON UPDATE NO ACTION,
 CONSTRAINT `fk_drm_department_roles`
  FOREIGN KEY (`department_roles_id` )
  REFERENCES `ecommerce`.`department_roles` (`id` )
  ON DELETE CASCADE
  ON UPDATE NO ACTION)
ENGINE = InnoDB;

Теперь, когда я пытаюсь выбрать из отделов и департаментов_ролей, я показываю данные.Я получаю это.

INSERT INTO department_roles_map(department_roles_id, departments_id) VALUES (1, 1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`ecommerce`.`department_roles_map`, CONSTRAINT `fk_drm_departments` FOREIGN KEY (`departments_id`) REFERENCES `departments` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION)

Любая помощь будет высоко ценится!

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Во-первых, я впечатлен тем, что вам удалось создать таблицу InnoDB, содержащую ссылки FK на две таблицы MyISAM!

Попробуйте создать все три таблицы с движком InnoDB и повторите попытку ....

0 голосов
/ 20 марта 2012

Как родительская, так и дочерняя таблицы должны использовать механизм хранения InnoDB, но вы используете MyISAM для родительских таблиц.

Я предполагаю, что уже существует таблица с именем Department_roles_map, поэтому, когда вызапустить CREATE TABLE IF NOT EXISTS, это не удалось, потому что таблица уже существует, и игнорирует ошибку.Затем, когда вы пытаетесь вставить данные в other Department_roles_map, происходит сбой с ошибкой FK.

Но это только предположение.

Я согласен с Tom Mac, попробуйтесоздание всех 3 таблиц с использованием InnoDB, но вы также должны подтвердить, что никаких других таблиц с такими именами уже не существует.

...