我知道这一定是一个荒谬的问题,但我无法理解为什么会发生这种情况(开始使用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只允许插入。这个问题的答案可能会帮助我完成我正在进行的整个项目。
答案 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');
插入将成功。