MySQL允许INSERT无效

时间:2016-11-21 13:06:15

标签: mysql

我知道这一定是一个荒谬的问题,但我无法理解为什么会发生这种情况(开始使用MySQL)。基本上我有这两个表:

-- -----------------------------------------------------
-- Table `hospital`.`hospital`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `hospital`.`hospital` (
  `hospital_id` INT NOT NULL AUTO_INCREMENT,
  `hospital_name` VARCHAR(45) NOT NULL,
  `hospital_address` VARCHAR(45) NOT NULL,
  `hospital_phone1` VARCHAR(11) NOT NULL,
  `hospital_phone2` VARCHAR(11) NULL,
  `CRM_director` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`hospital_id`),
  UNIQUE INDEX `hospital_id_UNIQUE` (`hospital_id` ASC))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `hospital`.`employee`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `hospital`.`employee` (
  `employee_id` INT NOT NULL AUTO_INCREMENT,
  `employee_name` VARCHAR(45) NOT NULL,
  `funcao` VARCHAR(45) NOT NULL,
  `shift` VARCHAR(10) NOT NULL,
  `salary` INT NOT NULL,
  `hospital_id` INT NOT NULL,
  PRIMARY KEY (`employee_id`),
  UNIQUE INDEX `employee_id_UNIQUE` (`employee_id` ASC),
  INDEX `fk_employee_hospital_idx` (`hospital_id` ASC),
  CONSTRAINT `fk_employee_hospital`
    FOREIGN KEY (`hospital_id`)
    REFERENCES `hospital`.`hospital` (`hospital_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

我希望在实施数据库时看到的行为是,当我插入新员工时,它不允许该员工的字段hospital_id是医院表中不存在的ID。但是,我尝试插入一个新员工,从我的医院表中指定一个不存在的hospital_id,但mysql只允许插入。这个问题的答案可能会帮助我完成我正在进行的整个项目。

1 个答案:

答案 0 :(得分:1)

正如其他人所评论的那样,你的表没有任何问题。创建它们并尝试您提供的插入会产生预期的错误。您将foreign_key_checks设置为关闭

的最重要的因素
  

如果设置为1(默认值),InnoDB表的外键约束   检查。如果设置为0,则忽略外键约束,使用a   几个例外。

如果在mysql配置中定义为0或者

SET foreign_key_checks=0;

接着是

INSERT INTO employee (employee_name, funcao, shift, salary, hospital_id) VALUES ('bigfool', 'Janitor', '1', '2000', '200');

插入将成功。