Таблицы пусты в MySQL.
-
23-08-2019 - |
Вопрос
Я использовал MySQL Workbench для создания базы данных и теперь вставил ее в клиент командной строки, используя:
mysql> .C: Documents and Settings Kdegroote My Documents School 2008-2009 ICT2 Gegevensbanken labo hoofdstuk 3 oef 6 pizzasecondtry.sql
По какой-то причине последняя таблица не будет принята.«Невозможно создать таблицу» — это сообщение об ошибке.
Я вручную отредактировал данные, чтобы они были практически такими же, только без специальных опций, которые Workbench добавляет к ним, и это сработало.
Я изучал оригинал, но не понимаю, почему он не показывает мне таблицы.Поэтому мне было интересно, может ли кто-нибудь здесь взглянуть на это.Может быть, кто-то еще увидит то, что я упускаю из виду.
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` )
. . .
Другие советы
ЗАДАЧА РЕШЕНА.
Я решил свою проблему здесь скорее случайно.Проблема оказалась в ограничениях в таблице «Поставки».
Два первичных ключа одновременно являются внешними ключами, и это генерирует ошибку, если вы хотите их ограничить.
Поэтому я просто исключил ограничения, и все работает.
Пытаться use PizzaDelivery
перед запуском шоу-таблиц.Вы создали свои таблицы в PizzaDelivery
схема, но вы, вероятно, подключены к другой схеме по умолчанию.Схема по умолчанию — это параметр клиента командной строки mysql:
$ mysql -h <db-host> -u <username> -p <schema-name>
(примечание:-p означает запрос пароля, когда ему не задан аргумент, чего обычно не следует делать, поскольку аргументы отображаются в выводе ps, а также сохраняются на диск в истории оболочки.Все параметры командной строки являются необязательными.)