创建时没有alter语句的MySQL外键失败

时间:2014-02-03 22:23:44

标签: mysql

以下SQL失败。用“#1005 - 无法创建表'scheduler_appointmentLog'(错误号:150)”

CREATE TABLE IF NOT EXISTS `scheduler_appointment` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `timeAdded` INT NOT NULL,
  `timeModified` INT NOT NULL,
  `core_office_id` INT NOT NULL,
  `core_patrparty_id` INT NOT NULL,
  `core_procedure_id` INT NOT NULL,
  `core_staff_id_dr` INT NOT NULL,
  `scheduler_appointmentStatus_id` INT NOT NULL,
  `scheduler_chair_id` INT NOT NULL,
  `apptDate` DATE NULL,
  `startTime` TIME NULL,
  `endTime` TIME NULL,
  `arrivedTime` TIME NULL,
  `seatTime` TIME NULL,
  `readyForDoctor` TIME NULL,
  `frontDeskTime` TIME NULL,
  `departTime` TIME NULL,
  `comment` LONGTEXT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_scheduler_appointment_scheduler_appointmentRequest1`
    FOREIGN KEY (`id`)
    REFERENCES `scheduler_appointmentRequest` (`scheduler_appointment_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_scheduler_appointment_financial_payschedQ1`
    FOREIGN KEY (`id`)
    REFERENCES `financial_payschedQ` (`scheduler_appointment_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_scheduler_appointment_financial_chargeLog1`
    FOREIGN KEY (`id`)
    REFERENCES `financial_chargeLog` (`scheduler_appointment_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_scheduler_appointment_scheduler_appointmentLog1`
    FOREIGN KEY (`id`)
    REFERENCES `scheduler_appointmentLog` (`scheduler_appointment_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

但是,如果我把它变成2个语句就行了。一个语句中的Create表和另一个语句中的约束。

这将添加没有错误的表。

CREATE TABLE IF NOT EXISTS `scheduler_appointment` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `timeAdded` INT NOT NULL,
  `timeModified` INT NOT NULL,
  `core_office_id` INT NOT NULL,
  `core_patrparty_id` INT NOT NULL,
  `core_procedure_id` INT NOT NULL,
  `core_staff_id_dr` INT NOT NULL,
  `scheduler_appointmentStatus_id` INT NOT NULL,
  `scheduler_chair_id` INT NOT NULL,
  `apptDate` DATE NULL,
  `startTime` TIME NULL,
  `endTime` TIME NULL,
  `arrivedTime` TIME NULL,
  `seatTime` TIME NULL,
  `readyForDoctor` TIME NULL,
  `frontDeskTime` TIME NULL,
  `departTime` TIME NULL,
  `comment` LONGTEXT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;

这将添加没有错误的约束。

ALTER TABLE `scheduler_appointment` ADD 
  CONSTRAINT `fk_scheduler_appointment_scheduler_appointmentRequest1`
    FOREIGN KEY (`id`)
    REFERENCES `scheduler_appointmentRequest` (`scheduler_appointment_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION;

...编辑 从phpMyAdmin工作导出以显示我的不是倒退。

ALTER TABLE `scheduler_appointment`
  ADD CONSTRAINT `fk_scheduler_appt_financial_payschedQ1` FOREIGN KEY (`id`) REFERENCES `financial_payschedQ` (`scheduler_appointment_id`),
  ADD CONSTRAINT `fk_scheduler_appointment_financial_payschedQ1` FOREIGN KEY (`id`) REFERENCES `financial_payschedQ` (`scheduler_appointment_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_scheduler_appointment_scheduler_appointmentLog1` FOREIGN KEY (`id`) REFERENCES `scheduler_appointmentLog` (`scheduler_appointment_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_scheduler_appointment_scheduler_appointmentRequest1` FOREIGN KEY (`id`) REFERENCES `scheduler_appointmentRequest` (`scheduler_appointment_id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

我想我需要帮助才能理解为什么ALTER表会将它添加到数据库中,但是无法在create table语句中完成。如果他们都失败了我就不会打扰,但是一个人工作而一个人没有。如果MySQL Workbench将导出为ALTER语句(如phpMyAdmin)而不是内联语句,那么我也不会想知道答案。但是我需要知道从工作台导出的文件加载到phpMyAdmin。

0 个答案:

没有答案