2013-12-10 107 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有一個叫做「訪問號碼」的約束。

你總是要確保約束名稱不同,否則你會有這個錯誤。我在工作臺上有類似的問題。我改變了解決問題的名字。

相關問題