Frage

Ich habe einige Tabellen mit MySQL Workbench, und dann tat vorwärts 'forward Ingenieurs-Skripte zu erstellen, um diese Tabellen zu erstellen. ABER, führen die Skripte mich zu einer Reihe von Problemen. Eine davon beinhaltet den Fremdschlüssel. Also habe ich versuchte separate Fremdschlüssel Additionen mit alten table zu schaffen, und ich bin immer noch Probleme bekommen. Der Code ist unten (die eingestellten Aussagen, Drop / erstellen Aussagen ich links in ... obwohl ich glaube nicht, sollten sie für diese Rolle):

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

 DROP SCHEMA IF EXISTS `mydb` ;
 CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

 -- -----------------------------------------------------
 -- Table `mydb`.`User`
 -- -----------------------------------------------------
 DROP TABLE IF EXISTS `mydb`.`User` ;

 CREATE  TABLE IF NOT EXISTS `mydb`.`User` (
   `UserName` VARCHAR(35) NOT NULL ,
   `Num_Accts` INT NOT NULL ,
   `Password` VARCHAR(45) NULL ,
   `Email` VARCHAR(45) NULL ,
   `User_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_ID`) )
 ENGINE = InnoDB;


 -- -----------------------------------------------------
 -- Table `mydb`.`User_Space`
 -- -----------------------------------------------------
 DROP TABLE IF EXISTS `mydb`.`User_Space` ;

 CREATE  TABLE IF NOT EXISTS `mydb`.`User_Space` (
   `User_UserName` VARCHAR(35) NOT NULL ,
   `User_Space_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_Space_ID`),
 FOREIGN KEY (`User_UserName`)
 REFERENCES `mydb`.`User` (`UserName`)
 ON UPDATE CASCADE ON DELETE CASCADE)
 ENGINE = InnoDB;

 SET SQL_MODE=@OLD_SQL_MODE;
 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Der Fehler erzeugt dies ist:
Fehlercode: 1005 Can not create table 'mydb.user_space' (errno: 150)

Jeder weiß, was zum Teufel ich falsch mache ?? Und alle anderen haben Probleme mit der Skripterstellung von MySQL Workbench getan? Es ist ein schönes Werkzeug, aber ärgerlich, dass es Skripte Pumpen aus, die für mich nicht arbeiten.

[Als FYI hier ist das Skript es generiert automatisch:

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

 DROP SCHEMA IF EXISTS `mydb` ;
 CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

 -- -----------------------------------------------------
 -- Table `mydb`.`User`
 -- -----------------------------------------------------
 DROP TABLE IF EXISTS `mydb`.`User` ;

 CREATE  TABLE IF NOT EXISTS `mydb`.`User` (
   `UserName` VARCHAR(35) NOT NULL ,
   `Num_Accts` INT NOT NULL ,
   `Password` VARCHAR(45) NULL ,
   `Email` VARCHAR(45) NULL ,
   `User_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_ID`) )
 ENGINE = InnoDB;


 -- -----------------------------------------------------
 -- Table `mydb`.`User_Space`
 -- -----------------------------------------------------
 DROP TABLE IF EXISTS `mydb`.`User_Space` ;

 CREATE  TABLE IF NOT EXISTS `mydb`.`User_Space` (
   `User_Space_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_Space_ID`) ,
   INDEX `User_ID` () ,
   CONSTRAINT `User_ID`
     FOREIGN KEY ()
     REFERENCES `mydb`.`User` ()
     ON DELETE NO ACTION
     ON UPDATE NO ACTION)
 ENGINE = InnoDB;


 SET SQL_MODE=@OLD_SQL_MODE;
 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

** Dank!]

War es hilfreich?

Lösung

Ich habe MySQL Workbench nicht verwendet, um eine Menge von Schemata zu erzeugen, aber ich fand das Problem im Skript. Die Fremdschlüssel-Definition in der Tabelle User_Space versucht, einen Fremdschlüssel auf einer nicht indizierten Spalt in der User Tabelle zu erstellen. Wenn Sie die User Definition ändern, einen Index für UserName zu haben, wie folgt aus:

  CREATE  TABLE IF NOT EXISTS `mydb`.`User` (
   `UserName` VARCHAR(35) NOT NULL ,
   `Num_Accts` INT NOT NULL ,
   `Password` VARCHAR(45) NULL ,
   `Email` VARCHAR(45) NULL ,
   `User_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_ID`),
   INDEX(`UserName`)
 )
 ENGINE = InnoDB;

... wird das Skript erfolgreich zu sein. Es klingt wie MySQL Workbench ist wahrscheinlich nicht Indizes berücksichtigt, wenn sie die Fremdschlüsseldefinitionen erzeugt. Ich bin mir nicht sicher, ob Sie diese in Ihrem Schema Diagramme beheben können oder wenn es ein größerer Fehler im Programm ist, aber ich würde sehen, ob Sie Indexdefinitionen in den richtigen Stellen hinzufügen könnten und bestimmen, ob, dass die Skript Generation Behebungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top