我用MySQL工作台以生成数据库,现在我使用其插入到命令行的客户端:

  

的MySQL>。 C:\ Documents和   设置\ kdegroote \我的   文档\学校\ 2008- 2009年\ ICT 2   \ Gegevensbanken \ Labo的\ Hoofdstuk 3 OEF   6 \ pizzasecondtry.sql

出于某种原因,最后一个表将不被接受。 “不能创建表”是该错误消息。

我手动editted的数据基本上是相同的,只是没有特殊选项工作台增加了它和它的工作那样。

我一直在研究的原始,但我不明白为什么它不会显示我的表。 所以我在想,如果有人在这里可以看看它。也许别人会看到我俯瞰什么。

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;
有帮助吗?

解决方案

您可以经常一个InnoDB错误这样获取更多信息

mysql> SHOW ENGINE INNODB STATUS;

的输出是长,但状态输出中只见这样:

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

在的问题是,DeliveriesOrders表都声明一个外键命名employee_id约束。

约束名称必须在所有表中的唯一一个给定的数据库。的“错误号:121”是表示重复键错误一个InnoDB错误代码。在这种情况下,约束名称的唯一不被满足。

您可以解决这个问题,同时确保自己的外键约束,如果你只需要改变所声明的约束的名称,例如:

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

其他提示

问题解决了。

我在这里解决了我的问题,而意外。 问题似乎是限制在“交货”表

在2个primairy键是在同一时间外键和生成和错误,如果要约束他们。

所以,我干脆离开了约束和一切正常。

运行节目表之前尝试use PizzaDelivery。您在PizzaDelivery模式中创建你的表,但你可能有不同的默认架构连接。默认模式是参数到mysql命令行客户机:

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

(注意:当没有给出一个参数,你一般不应该这样做,因为论据ps的输出显示,并且还壳历史记录的保存到磁盘它-p表示提示密码所有的命令行参数。是可选的。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top