无法添加或更新子行:外键约束失败

时间:2019-05-29 04:59:11

标签: php database foreign-keys constraints php-mysqlidb

用户表中的外键似乎不允许我输入数据,主表是公司表。

我尝试在用户表中将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;

这是显示的错误消息

无法添加或更新子行:外键约束失败(webpageusers,CONSTRAINT fk_users_company1外键(company_idcompany)参考companyidcompany)删除不采取行动,而更新不采取行动)

1 个答案:

答案 0 :(得分:1)

这看起来像是对我的循环引用。

您不能在没有用户的情况下插入公司,也不能在没有公司的情况下插入用户。您也不能一次插入两个表。

确定您是否真的需要这种关系。如果存在一对一的关系,则您可能只能处理一张桌子。如果公司有多个用户,则可以从公司表中删除user_id。如果一个用户可以属于多个公司,则可以创建一个以company_id,user_id对作为记录的成员资格表。

如果这样做,则可能需要删除外键和非空约束。