Vra

Ek het MySQL Workbench gebruik om 'n databasis te genereer en nou het ek dit in die opdragreëlkliënt ingevoeg deur:

mysql> .C: Dokumente en instellings kdegoote My Documents School 2008-2009 ict2 Gegevensbanken labo hoofdstuk 3 oef 6 pizzasecondtry.sql

Om een ​​of ander rede sal die laaste tafel nie aanvaar word nie."Kan nie tabel skep nie" is die foutboodskap.

Ek het die data met die hand gewysig om basies dieselfde te wees, net sonder die spesiale opsies wat Workbench daarby voeg en dit het so gewerk.

Ek het die oorspronklike bestudeer, maar ek verstaan ​​nie hoekom dit nie vir my die tabelle sal wys nie.So ek het gewonder of iemand hier kan kyk daarna.Miskien sal iemand anders sien wat ek miskyk.

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;
Was dit nuttig?

Oplossing

Jy kan dikwels kry meer inligting uit 'n InnoDB fout soos hierdie:

mysql> SHOW ENGINE INNODB STATUS;

Die produksie is 'n lang, maar onder die status uitset sien ek dit:

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

Die probleem is dat die Deliveries en die Orders tafels beide verklaar 'n vreemde sleutel beperking vernoem employee_id.

Beperking name moet uniek oor al die tafels in 'n gegewe databasis. Die "Errno: 121" is 'n InnoDB fout kode dui op 'n duplikaatsleutel fout. In hierdie geval, die uniekheid van dwang name is nie tevrede nie.

Jy kan hierdie probleem op te los en steeds jou vreemde sleutel beperkinge hou as jy net die naam van die verklaarde beperking verander, byvoorbeeld:

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

Ander wenke

probleem opgelos.

Ek opgelos my probleem hier eerder deur 'n ongeluk. Die probleem blyk te wees die beperkinge in die "Aflewerings" tafel.

Die 2 laerskool sleutels is vreemde sleutels op dieselfde tyd en dat genereer en fout as jy wil hê hulle moet aan bande lê.

So ek net uitgelaat die beperkings en alles werk.

Probeer use PizzaDelivery voor loop show tafels. Jy geskep jou tafels in die PizzaDelivery skedule, maar jy waarskynlik verband hou met 'n ander standaard skedule. Die standaard skema is die parameter om die mysql command line kliënt:

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

(let wel: p beteken vinnige vir wagwoord wanneer dit nie 'n argument wat jy in die algemeen moet nie doen nie, want argumente opdaag in PS uitset en ook gered te skyf in die dop geskiedenis gegee Al die command line parameters. is opsioneel.)

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top