Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено - PullRequest
0 голосов
/ 29 мая 2019

Внешний ключ в пользовательской таблице не позволяет мне вводить мои данные, первичная таблица - это таблица компании.

Я пытаюсь сделать companyid не первичным ключом в таблице пользователей, но он не очень популярен

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

CREATE SCHEMA IF NOT EXISTS `webpage` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `webpage` ;

-- -----------------------------------------------------
-- Table `webpage`.`company`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `webpage`.`company` (
  `idcompany` INT NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  `user_id` INT NOT NULL,
  PRIMARY KEY (`idcompany`),
  INDEX `fk_company_user1_idx` (`user_id` ASC),
  CONSTRAINT `fk_company_user1`
    FOREIGN KEY (`user_id`)
    REFERENCES `webpage`.`user` (`iduser`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `webpage`.`user`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `webpage`.`user` (
  `iduser` INT NOT NULL,
  `username` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  `email` VARCHAR(45) NOT NULL,
  `first_name` TEXT NOT NULL,
  `last_name` TEXT NOT NULL,
  `gender` TEXT NOT NULL,
  `company_id` INT NOT NULL,
  PRIMARY KEY (`iduser`),
  INDEX `fk_user_company_idx` (`company_id` ASC),
  CONSTRAINT `fk_user_company`
    FOREIGN KEY (`company_id`)
    REFERENCES `webpage`.`company` (`idcompany`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Это сообщения об ошибках, которые показывают

Невозможно добавить илиобновить дочернюю строку: ограничение внешнего ключа не выполнено (webpage. users, CONSTRAINT fk_users_company1 FOREIGN KEY (company_idcompany) ССЫЛКИ company (idcompany) ВКЛ УДАЛИТЬ НЕТ ДЕЙСТВИЙ, ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ)

1 Ответ

1 голос
/ 29 мая 2019

Это похоже на круговую ссылку на меня.

Вы не можете вставить компанию без пользователя и не можете вставить пользователя без компании. Вы также не можете вставить в две таблицы одновременно.

Решите, действительно ли вам нужны такие отношения. Если есть отношения один к одному, вы можете иметь дело только с одним столом. Если в компании более одного пользователя, вы можете удалить user_id из таблицы компании. Если пользователь может принадлежать более чем одной компании, вы можете создать таблицу членства с записями company_id, user_id.

В противном случае вам может потребоваться удалить внешний ключ и ненулевые ограничения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...