Таблицы являются пустым набором в MySQL - PullRequest
2 голосов
/ 21 декабря 2008

Я использовал MySQL Workbench для генерации базы данных и теперь вставил ее в клиент командной строки, используя:

mysql>. C: \ Документы и Настройки \ kdegroote \ Мои Документы \ Школа \ 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;

Ответы [ 3 ]

4 голосов
/ 21 декабря 2008

Часто вы можете получить больше информации об ошибке 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.

Имена ограничений должны быть уникальными для всех таблиц в данной базе данных. «Errno: 121» - это код ошибки InnoDB, указывающий на ошибку дублированного ключа. В этом случае уникальность имен ограничений не выполняется.

Вы можете исправить эту проблему и сохранить ограничения внешнего ключа, если просто измените имя объявленного ограничения, например:

CREATE TABLE IF NOT EXISTS `PizzaDelivery`.`Deliveries` (
  . . .
  CONSTRAINT `employee_id2`
    FOREIGN KEY (`employee_id` )
  . . .
1 голос
/ 21 декабря 2008

ПРОБЛЕМА РЕШЕНА.

Я решил свою проблему здесь совершенно случайно. Проблема заключалась в ограничениях в таблице «Поставки».

2 ключа primairy являются внешними ключами одновременно, и он генерирует ошибку, если вы хотите их ограничить.

Так что я просто пропустил ограничения, и все работает.

1 голос
/ 21 декабря 2008

Попробуйте use PizzaDelivery перед запуском шоу таблиц. Вы создали свои таблицы в схеме PizzaDelivery, но вы, вероятно, подключились к другой схеме по умолчанию. Схема по умолчанию - это параметр клиента командной строки mysql:

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

(примечание: -p означает запрос пароля, когда ему не задан аргумент, чего обычно не следует делать, поскольку аргументы отображаются в выводе ps, а также сохраняются на диске в истории оболочки. Все параметры командной строки являются необязательными.)

...