2008-12-21 6 views
2

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:tables sont vides dans MySQL

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 gagné ne pas être accepté. "Impossible de créer une table" est le message d'erreur.

J'ai édité manuellement les données pour qu'elles soient essentiellement les mêmes, sans les options spéciales que Workbench ajoute et cela a fonctionné comme ça.

J'ai étudié l'original mais je ne comprends pas pourquoi il ne me montrera pas les tables. Je me demandais si quelqu'un pouvait y jeter un coup d'œil. Peut-être que quelqu'un d'autre verra ce que je néglige.

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @OLD_F[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

Répondre

4

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 Orders déclarent une contrainte de clé étrangère nommée employee_id.

Les noms de contrainte doivent être uniques dans toutes les tables d'une base de données donnée. Le "errno: 121" est un code d'erreur InnoDB indiquant une erreur de clé en double. Dans ce cas, l'unicité des noms de contraintes n'est pas satisfaite.

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`) 
    . . . 
1

Essayez use PizzaDelivery avant d'exécuter les tables d'affichage. Vous avez créé vos tables dans le schéma PizzaDelivery, mais vous vous êtes probablement connecté avec 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 ps et tous les paramètres de la ligne de commande sont facultatifs.)

+0

merci, je maintenant essayé d'ajouter une autre façon et un autre problème a montré, que je décris dans la troisième ligne du premier message. – Vordreller

+0

-p prend un argument ... sur Windows au moins. – Greg

+0

-p prend un argument, qui doit faire partie du même mot, par ex. "-ppassword" pas "-p mot de passe" –

1

PROBLEM RESOLU.

J'ai résolu mon problème ici plutôt par accident. Le problème semblait être les contraintes dans la table "Livraisons".

Les 2 clés primaires sont des clés étrangères en même temps et génèrent des erreurs si vous souhaitez les contraindre. Donc, j'ai simplement laissé de côté les contraintes et tout fonctionne.

Questions connexes