Question

je MySQL Workbench pour générer une base de données et maintenant j'inséré dans le client de ligne de commande en utilisant:

  

mysql>. C: \ Documents and   Settings \ kdegroote \ Mes   Documents \ école \ 2008-2009 \ ICT2   \ Gegevensbanken \ Labo \ Hoofdstuk 3 oef   6 \ pizzasecondtry.sql

Pour une raison quelconque, la dernière table ne sera pas acceptée. "Impossible de créer la table" est le message d'erreur.

J'editted manuellement les données sont fondamentalement les mêmes, juste sans les options spéciales Workbench y ajoute et cela a fonctionné comme ça.

J'étudie l'original mais je ne comprends pas pourquoi il ne sera pas me montrer les tables. Alors je me demandais si quelqu'un ici pourrait avoir un coup d'oeil. Peut-être que quelqu'un d'autre va voir ce que je donne sur.

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;
Était-ce utile?

La solution

Vous pouvez souvent obtenir plus d'informations à partir d'une erreur InnoDB comme ceci:

mysql> SHOW ENGINE INNODB STATUS;

La sortie est longue, mais parmi la sortie d'état, j'ai vu ceci:

------------------------
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. 

Le problème est que la Deliveries et les tables de Orders deux déclarent une contrainte de clé étrangère nommée employee_id.

Les noms de contrainte doivent être uniques sur toutes les tables dans une base de données. Le « errno: 121 » est un code d'erreur indiquant InnoDB clé doublon. Dans ce cas, l'unicité des noms de contrainte n'est pas satisfait.

Vous pouvez résoudre ce problème et de toujours garder vos clés étrangères si vous changez simplement le nom de la contrainte déclarée, par exemple:

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

Autres conseils

Problem solved.

Je résolu mon problème ici plutôt par hasard. Le problème semble être les contraintes dans le tableau « Les livraisons ».

Les 2 touches sont primairy clés étrangères en même temps et qui génère et erreur si vous voulez les contraindre.

Alors je simplement quitté les contraintes et tout fonctionne.

Essayez use PizzaDelivery avant d'exécuter des tables d'exposition. Vous avez créé vos tables dans le schéma PizzaDelivery, mais vous avez probablement connecté à un schéma par défaut différent. Le schéma par défaut est le paramètre au client de ligne de commande mysql:

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

(note: -p invite signifie le mot de passe quand il est pas donné un argument, que vous devriez généralement pas faire parce que les arguments apparaissent dans la production ps et également obtenir enregistrés sur le disque dans l'histoire du shell Tous les paramètres de ligne de commande. ils sont facultatifs.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top