質問

私は、データベースを生成するためのMySQL Workbenchを使用して、今私が使用して、コマンドラインクライアントにそれを挿入します:

  

MySQLの>。 C:\ Documentsと   Settings \のkdegroote \マイ   文書は学校を\ \ 2008から2009 \ ICT2   \ Gegevensbanken \ラボ\ 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