2017-05-09 22 views
1
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'; 

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE 
utf8_general_ci ; 
USE `mydb` ; 

-- ----------------------------------------------------- 
-- Table `mydb`.`Diploma` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `mydb`.`Diploma` (
`diploma_id` VARCHAR(5) NOT NULL, 
`diploma_name` VARCHAR(90) NULL, 
PRIMARY KEY (`diploma_id`) 
) ENGINE=InnoDB; 


-- ----------------------------------------------------- 
-- Table `mydb`.`School` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `mydb`.`School` (
`school_id` INT(1) NOT NULL, 
`school_name` VARCHAR(45) NULL, 
PRIMARY KEY (`school_id`) 
) ENGINE=InnoDB; 


-- ----------------------------------------------------- 
-- Table `mydb`.`Student` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `mydb`.`Student` (
`student_number` INT(8) NOT NULL, 
`student_id` INT(8) NULL, 
`student_name` VARCHAR(45) NULL, 
`student_password` VARCHAR(45) NULL, 
`student_mobile` INT(8) NULL, 
`student_email` VARCHAR(45) NULL, 
`diploma_id` VARCHAR(5) NOT NULL, 
`school_id` INT(1) NOT NULL, 
PRIMARY KEY (`student_number`), 
INDEX `fk_Student_Diploma1_idx` (`diploma_id` ASC), 
INDEX `fk_Student_School1_idx` (`school_id` ASC), 
CONSTRAINT `fk_Student_Diploma1` FOREIGN KEY (`diploma_id`) 
    REFERENCES `mydb`.`Diploma` (`diploma_id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION, 
CONSTRAINT `fk_Student_School1` FOREIGN KEY (`school_id`) 
    REFERENCES `mydb`.`School` (`school_id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB; 


-- ----------------------------------------------------- 
-- Table `mydb`.`OFN` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `mydb`.`OFN` (
`ofn_id` INT(8) NOT NULL, 
`ofn_username` VARCHAR(45) NULL, 
`ofn_password` VARCHAR(45) NULL, 
`ofn_email` VARCHAR(45) NULL, 
PRIMARY KEY (`ofn_id`) 
) ENGINE=InnoDB; 


-- ----------------------------------------------------- 
-- Table `mydb`.`Appointment` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `mydb`.`Appointment` (
`appointment_id` INT(8) NOT NULL, 
`appointment_date` DATE NULL, 
`appointment_time` TIME NULL, 
`ofn_id` INT(8) NOT NULL, 
PRIMARY KEY (`appointment_id`), 
INDEX `fk_Appointment_OFN1_idx` (`ofn_id` ASC), 
CONSTRAINT `fk_Appointment_OFN1` FOREIGN KEY (`ofn_id`) 
    REFERENCES `mydb`.`OFN` (`ofn_id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB; 


-- ----------------------------------------------------- 
-- Table `mydb`.`Booking` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `mydb`.`Booking` (
`student_number` INT(8) NOT NULL, 
`appointment_id` INT(8) NOT NULL, 
`booking_date` DATE NULL, 
`booking_time` TIME NULL, 
PRIMARY KEY (`student_number` , `appointment_id`), 
INDEX `fk_Student_has_Appointment_Appointment1_idx` (`appointment_id` ASC), 
INDEX `fk_Student_has_Appointment_Student1_idx` (`student_number` ASC), 
CONSTRAINT `fk_Student_has_Appointment_Student1` FOREIGN KEY 
(`student_number`) 
    REFERENCES `mydb`.`Student` (`student_number`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION, 
CONSTRAINT `fk_Student_has_Appointment_Appointment1` FOREIGN KEY (`appointment_id`) 
    REFERENCES `mydb`.`Appointment` (`appointment_id`) 
    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; 

これは私が構築されたコードですが、それは誤り エラーコード与えた:1005:「MYDBを」テーブルを作成できません「を予約」 私はいくつかを見てみました同じ問題に遭遇した人々によって前の質問のうち、私はまだこの時点で立ち往生しています。 ご協力いただき誠にありがとうございます。MySQLのワークベンチ「にerrno 150外部キーは」

答えて

1

何とかそれは外部キーstudent_numberです。

私はこれらの可能性に考えています:

  1. 外部キー名はすでに既存のキーの複製です。外部キーの名前がデータベース内で一意であることを確認します。これをテストするために、キー名の最後にいくつかのランダムな文字を追加するだけです。

  2. テーブルの一方または両方がMyISAMテーブルです。外部キーを使用するには、テーブルを両方ともInnoDBにする必要があります。 (実際には、両方のテーブルがMyISAMの場合、エラーメッセージは表示されません。キーは作成されません)。クエリブラウザでは、テーブルタイプを指定できます。

  3. 参照しようとしているキーフィールドの1つに索引がないか、または主キーではありません。関係のフィールドの1つが主キーでない場合、そのフィールドの索引を作成する必要があります。

もチェック:情報について SET FOREIGN_KEY_CHECKS=0;

+0

おかげで、私は、外部キーチェックを逃したし、また、そこに私の外部キーの一部といくつかの間違いのように見えるが、それはすべて整理されて、ありがとうございましたあなたの助けのために、私は本当にそれを感謝します – Junx197

+0

あなたの問題がなくなったことを知ってうれしい。私はしばらく前に同じ間違いを犯しました。 –

+0

答えがあなたの問題を解決した場合、回答を受け入れ済みとマークすることを忘れないでください –

関連する問題