テーブルは、MySQLで空のセットです
-
23-08-2019 - |
質問
私は、データベースを生成するための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.
問題がDeliveries
とOrders
テーブルの両方が外部キー制約の名前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は、パスワードのプロンプトを意味し、コマンドラインパラメータのすべて。オプションです。)