以下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。