2013-12-10 60 views
0

好的,这是一个更新。我正在使用MySQL Workbench。这正是我在进行正向工程时输入的内容。通过你的一半将看到正向工程后的结果。为什么我不能正向工程?

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 

USE `mh23202` ; 

-- ----------------------------------------------------- 
-- Table `mh23202`.`Patient` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`Patient` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`Patient` (
    `Patient Number` INT NOT NULL, 
    `First Name` TEXT NULL, 
    `Last Name` TEXT NULL, 
    `Date of Birth` DATE NULL, 
    `Phone Number` INT NULL, 
    `Email` TEXT NULL, 
    `Gender` TEXT NULL, 
    `Race` TEXT NULL, 
    `Address` TEXT NULL, 
    `Reason for Visit` TEXT NULL, 
    `Primary Doctor` TEXT NULL, 
    PRIMARY KEY (`Patient Number`), 
    CONSTRAINT `Visit Number` 
    FOREIGN KEY (`Patient Number`) 
    REFERENCES `mh23202`.`Visits` (`Visit Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Physician Number` 
    FOREIGN KEY (`Patient Number`) 
    REFERENCES `mh23202`.`Physician` (`Physician Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`Visits` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`Visits` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`Visits` (
    `Visit Number` INT NOT NULL, 
    `Date of Visit` DATE NULL, 
    `Time of Visit` TIME NULL, 
    `Reason for Visit` TEXT NULL, 
    PRIMARY KEY (`Visit Number`), 
    CONSTRAINT `Patient Number` 
    FOREIGN KEY (`Visit Number`) 
    REFERENCES `mh23202`.`Patient` (`Patient Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Physician Number` 
    FOREIGN KEY (`Visit Number`) 
    REFERENCES `mh23202`.`Physician` (`Physician Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`Physician` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`Physician` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`Physician` (
    `Physician Number` INT NOT NULL, 
    `Specialty` TEXT NULL, 
    `First name` TEXT NULL, 
    `Last Name` TEXT NULL, 
    `Date of Birth` DATE NULL, 
    `Phone Number` INT NULL, 
    `Email` TEXT NULL, 
    `Gender` TEXT NULL, 
    `Race` TEXT NULL, 
    `Address` TEXT NULL, 
    PRIMARY KEY (`Physician Number`), 
    CONSTRAINT `Visit Number` 
    FOREIGN KEY (`Physician Number`) 
    REFERENCES `mh23202`.`Visits` (`Visit Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`Medication` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`Medication` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`Medication` (
    `Prescription Number` INT NOT NULL, 
    `Prescription Name` TEXT NULL, 
    `Units per Day` TEXT NULL, 
    `Start Date` DATE NULL, 
    `Finish Date` DATE NULL, 
    PRIMARY KEY (`Prescription Number`), 
    CONSTRAINT `Patient Number` 
    FOREIGN KEY (`Prescription Number`) 
    REFERENCES `mh23202`.`Patient` (`Patient Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Physician Number` 
    FOREIGN KEY (`Prescription Number`) 
    REFERENCES `mh23202`.`Physician` (`Physician Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`MedicalRecord` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`MedicalRecord` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`MedicalRecord` (
    `Physician Number` INT NULL, 
    `Date of Visit` DATE NULL, 
    `Time of Visit` TIME NULL, 
    `Reason for Visit` TEXT NULL, 
    `Findings` TEXT NULL, 
    `Notes` TEXT NULL, 
    `Treatment` TEXT NULL, 
    `Prescriptions` TEXT NULL, 
    `Procedures` TEXT NULL, 
    INDEX `Patient Number_idx` (`Physician Number` ASC), 
    CONSTRAINT `Patient Number` 
    FOREIGN KEY (`Physician Number`) 
    REFERENCES `mh23202`.`Patient` (`Patient Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`Nurse` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`Nurse` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`Nurse` (
    `Nurse Number` INT NOT NULL, 
    `First Name` TEXT NULL, 
    `Last Name` TEXT NULL, 
    `Date of Birth` DATE NULL, 
    `Phone Number` INT NULL, 
    `Email` TEXT NULL, 
    `Gender` TEXT NULL, 
    `Race` TEXT NULL, 
    `Address` TEXT NULL, 
    PRIMARY KEY (`Nurse Number`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`Secretary` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`Secretary` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`Secretary` (
    `Secretary Number` INT NOT NULL, 
    `First Name` TEXT NULL, 
    `Last Name` TEXT NULL, 
    `Date of Birth` DATE NULL, 
    `Phone Number` INT NULL, 
    `Email` TEXT NULL, 
    `Gender` TEXT NULL, 
    `Race` TEXT NULL, 
    `Address` TEXT NULL, 
    PRIMARY KEY (`Secretary Number`), 
    CONSTRAINT `Visit Number` 
    FOREIGN KEY (`Secretary Number`) 
    REFERENCES `mh23202`.`Visits` (`Visit Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`ChargeNurse` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`ChargeNurse` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`ChargeNurse` (
    `Charge Nurse Number` INT NOT NULL, 
    `First Name` TEXT NULL, 
    `Last Name` TEXT NULL, 
    `Date of Birth` DATE NULL, 
    `Phone Number` INT NULL, 
    `Email` TEXT NULL, 
    `Gender` TEXT NULL, 
    `Race` TEXT NULL, 
    `Address` TEXT NULL, 
    PRIMARY KEY (`Charge Nurse Number`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mh23202`.`Shifts` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mh23202`.`Shifts` ; 

CREATE TABLE IF NOT EXISTS `mh23202`.`Shifts` (
    `Shift Number` INT NOT NULL, 
    `Date of Shift` DATE NULL, 
    `Time of Shift` TIME NULL, 
    PRIMARY KEY (`Shift Number`), 
    CONSTRAINT `Secertary Number` 
    FOREIGN KEY (`Shift Number`) 
    REFERENCES `mh23202`.`Secretary` (`Secretary Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Physician Number` 
    FOREIGN KEY (`Shift Number`) 
    REFERENCES `mh23202`.`Physician` (`Physician Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Nurse Number` 
    FOREIGN KEY (`Shift Number`) 
    REFERENCES `mh23202`.`Nurse` (`Nurse Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `Charge Nurse Number` 
    FOREIGN KEY (`Shift Number`) 
    REFERENCES `mh23202`.`ChargeNurse` (`Charge Nurse Number`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; ` 

这就是结果。

ERROR: Error 1005: Can't create table 'mh23202.visits' (errno: 121) 

CREATE TABLE IF NOT EXISTS `mh23202`.`Visits` (

    `Visit Number` INT NOT NULL, 

    `Date of Visit` DATE NULL, 

    `Time of Visit` TIME NULL, 

    `Reason for Visit` TEXT NULL, 

    PRIMARY KEY (`Visit Number`), 

    CONSTRAINT `Patient Number` 

    FOREIGN KEY (`Visit Number`) 

    REFERENCES `mh23202`.`Patient` (`Patient Number`) 

    ON DELETE NO ACTION 

    ON UPDATE NO ACTION, 

    CONSTRAINT `Physician Number` 

    FOREIGN KEY (`Visit Number`) 

    REFERENCES `mh23202`.`Physician` (`Physician Number`) 

    ON DELETE NO ACTION 

    ON UPDATE NO ACTION) 

ENGINE = InnoDB 



SQL script execution finished: statements: 7 succeeded, 1 failed 



Fetching back view definitions in final form. 

Nothing to fetch 

Executing SQL script in server 

ERROR: Error 1005: Can't create table 'mh23202.visits' (errno: 121) 





CREATE TABLE IF NOT EXISTS `mh23202`.`Visits` (

    `Visit Number` INT NOT NULL, 

    `Date of Visit` DATE NULL, 

    `Time of Visit` TIME NULL, 

    `Reason for Visit` TEXT NULL, 

    PRIMARY KEY (`Visit Number`), 

    CONSTRAINT `Patient Number` 

    FOREIGN KEY (`Visit Number`) 

    REFERENCES `mh23202`.`Patient` (`Patient Number`) 

    ON DELETE NO ACTION 

    ON UPDATE NO ACTION, 

    CONSTRAINT `Physician Number` 

    FOREIGN KEY (`Visit Number`) 

    REFERENCES `mh23202`.`Physician` (`Physician Number`) 

    ON DELETE NO ACTION 

    ON UPDATE NO ACTION) 

ENGINE = InnoDB 



SQL script execution finished: statements: 7 succeeded, 1 failed 



Fetching back view definitions in final form. 

Nothing to fetch 
+5

请找一个方法来简化这篇文章...(去,希望,红袜!) – Nix

+0

我不知道如何简化这个?我对数据库完全陌生,我需要正向工程。我列出了所有的表格以及主键和外键。每次我尝试转发工程时,虽然我得到这个语法错误。 – SoxFan9298

+0

您错过了'FOREIGN KEY'约束中的列名。 – Barmar

回答

2

脚本中有很多错误。他们中的大多数是因为你正在创建一个FOREIGN KEY表,但没有指定下面的参考资料一节create table语句them.For例如:

CONSTRAINT `Visit Number` 
    FOREIGN KEY() 
    REFERENCES `mh23202`.`Visits`() 

空括号是在每个表的错误。对于外键,它应该具有表格中的列名称以及参考文献mh23202Visits()它应该具有该表的列名称。

正如评论所说,你的脚本中只有一个创建表,其他人从第一个复制。很可能您使用的工具无法正常工作,并尝试为一个表创建脚本。

编辑

你的编辑你有你创建表后命令空间中的字段名之间。它不应该或应该引用它。至于你的第一个创建声明:病人号码。

+0

我可以通过单击表格,然后转到外键并单击一个外键,然后选中列选项卡下的框,然后从引用的列选项卡中选择引用?因为我也这样做了,但它以另一个错误1005结束,无法创建表。 – SoxFan9298

+0

因为你没有说你使用了什么工具,所以我不能帮你。但是你必须在这个工具上找到表依赖关系。从你的脚本,它应该是病人和医生,检查二,检查参考选项,并再次尝试。 –

0

MySQL错误代码121:重复键上写或外键(Visit Number)更新

问题。

0

例如,您不能有同名的约束。

  • 表mh23202.Physician有一个叫做“访问次数”的约束。
  • 表mh23202.Patient有一个叫做“访问号码”的约束。
  • 表mh23202.Secretary有一个叫做“访问号码”的约束。

你总是要确保约束名称不同,否则你会有这个错误。我在工作台上有类似的问题。我改变了解决问题的名字。

相关问题