Domanda

Ho usato MySQL Workbench per generare un database e ora ho inserito nel client a riga di comando utilizzando:

  

mysql>. C: \ Documents and   Settings \ kdegroote \ My   Documenti \ Scuola \ 2008-2009 \ ICT2   \ Gegevensbanken \ Labo \ Hoofdstuk 3 OEF   6 \ pizzasecondtry.sql

Per qualche ragione, non sarà accettata l'ultima tabella. "Impossibile creare la tabella" è il messaggio di errore.

I Editted manualmente i dati per essere fondamentalmente la stessa, solo senza le opzioni speciali Workbench aggiunge ad esso e ha funzionato in quel modo.

Ho studiato l'originale, ma non capisco il motivo per cui non mi mostrerà le tabelle. Così mi chiedevo se qualcuno qui potrebbe avere uno sguardo esso. Forse qualcun altro vedere quello che sto con vista.

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;
È stato utile?

Soluzione

Spesso è possibile ottenere maggiori informazioni da un errore InnoDB come questo:

mysql> SHOW ENGINE INNODB STATUS;

L'uscita è lunga, ma tra l'uscita di stato ho visto questo:

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

Il problema è che il Deliveries e le tabelle Orders entrambi dichiarano una chiave esterna vincolo di nome employee_id.

I nomi di vincolo devono essere univoci in tutte le tabelle di un database. Il "errno: 121" è un codice di errore InnoDB indica un errore di chiave duplicata. In questo caso, l'unicità dei nomi di vincolo non è soddisfatto.

È possibile risolvere questo problema e ancora mantenere i vincoli di chiave esterna se si modifica il nome del vincolo dichiarato, ad esempio:

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

Altri suggerimenti

problema risolto.

ho risolto il mio problema qui piuttosto per caso. Il problema sembrava essere i vincoli nella tabella "consegne".

Le 2 chiavi primairy sono chiavi esterne allo stesso tempo e che genera e l'errore, se si desidera vincolare loro.

Così ho semplicemente lasciato fuori i vincoli e tutto funziona.

Prova use PizzaDelivery prima di eseguire show tables. Hai creato le tabelle nello schema PizzaDelivery, ma probabilmente in contatto con uno schema predefinito diverso. Lo schema predefinito è il parametro alla mysql client a riga di comando:

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

(nota: -p significa la richiesta di password quando non viene dato un argomento, che in genere non si dovrebbe fare, perché gli argomenti visualizzati in uscita ps e anche ottenere salvati su disco nella storia guscio Tutti i parametri della riga di comando. sono opzionali.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top