Frage

habe ich MySQL Workbench, eine Datenbank zu generieren und jetzt habe ich es in das Kommandozeilen-Client eingefügt werden:

  

mysql>. C: \ Dokumente und   Einstellungen \ kdegroote \ My   Dokumente Schule \ \ 2008-2009 \ ICT2   \ Gegevensbanken \ Labo \ Hoofdstuk 3 OEF   6 \ pizzasecondtry.sql

Aus irgendeinem Grund wird die letzte Tabelle nicht akzeptiert. „Erstellen Tabelle kann nicht“ ist die Fehlermeldung.

Ich editierte die Daten manuell im Grunde das gleiche sein, nur ohne die speziellen Optionen Workbench fügt und es funktionierte so.

Ich habe das Original studiert, aber ich verstehe nicht, warum es mir nicht die Tabellen zeigen. Also habe ich mich gefragt, ob jemand hier einen Blick auf sie haben könnte. Vielleicht hat jemand anderes sehen, was ich mit Blick auf.

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';

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


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Visitors` (
  `visitor_id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `adres` VARCHAR(45) NOT NULL ,
  `telephone` MEDIUMBLOB NOT NULL ,
  `email` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`visitor_id`))ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Employees` (
  `employee_id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`employee_id`))ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Orders` (
  `order_id` INT NOT NULL AUTO_INCREMENT ,
  `pizza` VARCHAR(45) NOT NULL ,
  `extra` VARCHAR(45) NULL ,
  `kind` VARCHAR(45) NOT NULL ,
  `amount` VARCHAR(45) NOT NULL ,
  `visitor_id` INT NOT NULL ,
  `employee_id` INT NOT NULL ,
  `order_time` TIME NOT NULL ,
  PRIMARY KEY (`order_id`) ,
  INDEX `visitor_id` (`visitor_id` ASC) ,
  INDEX `employee_id` (`employee_id` ASC) ,
  CONSTRAINT `visitor_id`
    FOREIGN KEY (`visitor_id` )
    REFERENCES `PizzaDelivery`.`Visitors` (`visitor_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `employee_id`
    FOREIGN KEY (`employee_id` )
    REFERENCES `PizzaDelivery`.`Employees` (`employee_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)ENGINE=InnoDB;


CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Deliveries` (
  `employee_id` INT NOT NULL ,
  `order_id` INT NOT NULL ,
  `voertuig_id` INT NOT NULL ,
  `deliverytime` TIME NOT NULL ,
  PRIMARY KEY (`employee_id`, `order_id`) ,
  INDEX `employee_id` (`employee_id` ASC) ,
  INDEX `order_id` (`order_id` ASC) ,
  CONSTRAINT `employee_id`
    FOREIGN KEY (`employee_id` )
    REFERENCES `PizzaDelivery`.`Employees` (`employee_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `order_id`
    FOREIGN KEY (`order_id` )
    REFERENCES `PizzaDelivery`.`Orders` (`order_id` )
    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;
War es hilfreich?

Lösung

Sie können oft erhalten weitere Informationen von einem InnoDB Fehler wie folgt aus:

mysql> SHOW ENGINE INNODB STATUS;

Der Ausgang ist lang, aber unter dem Statusausgang sah ich so aus:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
081221 12:02:36 Error in foreign key constraint creation 
for table `pizzadelivery/deliveries`.
A foreign key constraint of name `pizzadelivery/employee_id`
already exists. 

Das Problem ist, dass die Deliveries und die Orders Tabellen sowohl ein Fremdschlüssel namens employee_id erklären.

Constraint-Namen müssen in allen Tabellen in einer bestimmten Datenbank eindeutig sein. Die „errno: 121“ ist ein InnoDB-Fehlercode einen doppelten Schlüssel Fehler anzeigt. In diesem Fall ist die Einzigartigkeit des Constraint-Namen nicht zufrieden.

Sie können dieses Problem beheben und noch Ihre Fremdschlüssel-Constraints halten, wenn Sie nur den Namen der angegebenen Einschränkung ändern, zum Beispiel:

CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Deliveries` (
  . . .
  CONSTRAINT `employee_id2`
    FOREIGN KEY (`employee_id` )
  . . .

Andere Tipps

Problem gelöst.

ich mein Problem gelöst hier eher durch Zufall. Das Problem trat die Einschränkungen in dem „Lieferungen“ Tisch sein.

Die 2 primairy Tasten sind Fremdschlüssel in der gleichen Zeit und erzeugt und Fehler, wenn Sie sie beschränken möchten.

So einfach verließ ich die Zwänge und alles funktioniert.

Versuchen use PizzaDelivery vor zeigen Tabellen ausgeführt wird. Sie erstellt die Tabellen im PizzaDelivery Schema, aber wahrscheinlich mit einem anderen Standardschema verbunden. Das Standardschema ist der Parameter auf den mysql Kommandozeilen-Client:

$ mysql -h <db-host> -u <username> -p <schema-name>

(Anmerkung: -p bedeutet für Kennworteingabeaufforderung, wenn es kein Argument gegeben ist, die Sie sollten in der Regel nicht tun, weil Argumente in PS-Ausgabe erscheinen und auch auf der Festplatte in der Schale Geschichte gerettet werden Alle Befehlszeilenparameter. sind optional.)

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