[mySQL] Workbench - blad tworzenia bazy

0

Hej. Stworzylem projekt bazy w MySQL Workbench
user image

Niestety wywala mi błąd w kodzie SQL.

Action:

CREATE  TABLE IF NOT EXISTS `Diety`.`Posilek` (
  `idPosilku` INT NOT NULL AUTO_INCREMENT ,
  `idUzytkownika` INT NOT NULL ,
  `nazwaPosilku` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idPosilku`) ,
  INDEX `idUzytkownika` (`idUzytkownika` ASC) ,
  CONSTRAINT `idUzytkownika`
    FOREIGN KEY (`idUzytkownika` )
    REFERENCES `Diety`.`Uzytkownik` (`idUzytkownika` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB



Message:

Error Code: 1005
Can't create table 'diety.posilek' (errno: 121)

Może ktoś wie gdzie może znajdywać się błąd? Jak to obejść?

0

Powodem mogą być:

  1. gdzieś masz pętle ( ojciec -> syn co było pierwsze ...) ale nie widzę

  2. Niezgodność typów kluczy

  3. Dublują sie nazwy kluczy obcych (te w kodzie fk_....)

  4. Widzimisie mysql'a [rotfl] Warto podawać wersje mysql jest pod tym względem do bani ...

Podaj cały plik SQL albo projekt workbencha bo tak nie chce mi się sprawdzać

0

na 99% nie masz jeszcze tabeli Uzytkownik i nie może stworzyć FK

This error occurs when you are trying to create referential integrity between InnoDB engine tables and one of the key (primary key or foreign key) has not "unsigned" defined.

0

@Misiekd
Też o tym myślałem zawierając to w pkt 1) ale cały czas łudzę się, że workbench po tylu przejściach (alpha i całkowita przebudowa) jest czymś lepszym. Może będzie w końcu to stajnia oracle teraz.

0

Tabela użytkownik tworzy się.
Zaraz posprawdzam czy może jest to związane z nazwami FK

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 `Diety` DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci ;

-- -----------------------------------------------------
-- Table `Diety`.`Uzytkownik`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`Uzytkownik` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`Uzytkownik` (
  `idUzytkownika` INT NOT NULL AUTO_INCREMENT ,
  `waga` INT NULL ,
  `plec` CHAR(1)  NULL ,
  `aktywnosc` DOUBLE NULL ,
  PRIMARY KEY (`idUzytkownika`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`GrupaProduktu`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`GrupaProduktu` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`GrupaProduktu` (
  `idGrupyProduktu` INT NOT NULL AUTO_INCREMENT ,
  `nazwaGrupyProduktu` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idGrupyProduktu`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`PodgrupaProduktu`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`PodgrupaProduktu` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`PodgrupaProduktu` (
  `idPodgrupyProduktu` INT NOT NULL AUTO_INCREMENT ,
  `idGrupyProduktu` INT NOT NULL ,
  `nazwaPodgrupyProduktu` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idPodgrupyProduktu`) ,
  INDEX `idGrupyProduktu` (`idGrupyProduktu` ASC) ,
  CONSTRAINT `idGrupyProduktu`
    FOREIGN KEY (`idGrupyProduktu` )
    REFERENCES `Diety`.`GrupaProduktu` (`idGrupyProduktu` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`Produkt`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`Produkt` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`Produkt` (
  `idProduktu` INT NOT NULL AUTO_INCREMENT ,
  `idUzytkownika` INT NOT NULL ,
  `idPodgrupyProduktu` INT NOT NULL ,
  `nazwaProduktu` VARCHAR(45) NOT NULL ,
  `kCal` INT NOT NULL ,
  `bialko` FLOAT NOT NULL ,
  `tluszcz` FLOAT NOT NULL ,
  `weglowodany` FLOAT NOT NULL ,
  PRIMARY KEY (`idProduktu`) ,
  INDEX `idUzytkownika` (`idUzytkownika` ASC) ,
  INDEX `idPodgrupyProduktu` (`idPodgrupyProduktu` ASC) ,
  CONSTRAINT `idUzytkownika`
    FOREIGN KEY (`idUzytkownika` )
    REFERENCES `Diety`.`Uzytkownik` (`idUzytkownika` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `idPodgrupyProduktu`
    FOREIGN KEY (`idPodgrupyProduktu` )
    REFERENCES `Diety`.`PodgrupaProduktu` (`idPodgrupyProduktu` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`Posilek`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`Posilek` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`Posilek` (
  `idPosilku` INT NOT NULL AUTO_INCREMENT ,
  `idUzytkownika` INT NOT NULL ,
  `nazwaPosilku` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idPosilku`) ,
  INDEX `idUzytkownika` (`idUzytkownika` ASC) ,
  CONSTRAINT `idUzytkownika`
    FOREIGN KEY (`idUzytkownika` )
    REFERENCES `Diety`.`Uzytkownik` (`idUzytkownika` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`PosilekDnia`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`PosilekDnia` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`PosilekDnia` (
  `idPosilkuDnia` INT NOT NULL AUTO_INCREMENT ,
  `nazwaPosilkuDnia` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`idPosilkuDnia`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`ProduktyPosilku`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`ProduktyPosilku` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`ProduktyPosilku` (
  `idProduktuPosilku` INT NOT NULL AUTO_INCREMENT ,
  `idProduktu` INT NOT NULL ,
  `idPosilku` INT NOT NULL ,
  `wagaProduktuPosilku` INT NOT NULL ,
  PRIMARY KEY (`idProduktuPosilku`) ,
  INDEX `idProduktu` (`idProduktu` ASC) ,
  INDEX `idPosilku` (`idPosilku` ASC) ,
  CONSTRAINT `idProduktu`
    FOREIGN KEY (`idProduktu` )
    REFERENCES `Diety`.`Produkt` (`idProduktu` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `idPosilku`
    FOREIGN KEY (`idPosilku` )
    REFERENCES `Diety`.`Posilek` (`idPosilku` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`Dieta`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`Dieta` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`Dieta` (
  `idDiety` INT NOT NULL AUTO_INCREMENT ,
  `idUzytkownika` INT NOT NULL ,
  `dzienDiety` DATE NOT NULL ,
  PRIMARY KEY (`idDiety`) ,
  INDEX `idUzytkownika` (`idUzytkownika` ASC) ,
  CONSTRAINT `idUzytkownika`
    FOREIGN KEY (`idUzytkownika` )
    REFERENCES `Diety`.`Uzytkownik` (`idUzytkownika` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Diety`.`ProduktyDiety`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `Diety`.`ProduktyDiety` ;

CREATE  TABLE IF NOT EXISTS `Diety`.`ProduktyDiety` (
  `idProduktuDiety` INT NOT NULL AUTO_INCREMENT ,
  `idProduktu` INT NOT NULL ,
  `idDiety` INT NOT NULL ,
  `idPosilkuDnia` INT NOT NULL ,
  `wagaProduktuDiety` INT NOT NULL ,
  PRIMARY KEY (`idProduktuDiety`) ,
  INDEX `idProduktu` (`idProduktu` ASC) ,
  INDEX `idDiety` (`idDiety` ASC) ,
  INDEX `idPosilkuDnia` (`idPosilkuDnia` ASC) ,
  CONSTRAINT `idProduktu`
    FOREIGN KEY (`idProduktu` )
    REFERENCES `Diety`.`Produkt` (`idProduktu` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `idDiety`
    FOREIGN KEY (`idDiety` )
    REFERENCES `Diety`.`Dieta` (`idDiety` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `idPosilkuDnia`
    FOREIGN KEY (`idPosilkuDnia` )
    REFERENCES `Diety`.`PosilekDnia` (`idPosilkuDnia` )
    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;
0

Tak jest to był problem z nazewnictwem FK, kilka FK miało nazwę idUzytkownika, sam to wpisywałem...
Dzięki za porady :)

Jeszcze mam jedno pytanko, do kont użytkownika mam utworzona jedna bazę z której korzysta MySQL MembershipProvider. Teraz mam niby tą drugą bazę do danych potrzebnych w moim serwisie. Jak najlepiej rozwiązać połączenie między tymi dwoma bazami? W tej bazie co wkleiłem zmienię chyba idUzytkownika na username i będę pobierał to zalogowanego użytkownika.

Piszę sobie serwis w APS.NET.</image>

0

Nie wiem, czy to właściwy temat, ale sądzę, że problem jest na tyle podobny, że nie warto zakładać nowego [przy okazji pozdrawiam serdecznie z okazji pierwszego posta].
Mam MySQL 5.5.15 (na WinXP), do tego wspomagam się Workbench 5.2.34 - po zaprojektowaniu wstępnego szkieletu bazy, generowany kod (obojętnie w jaki sposób chcę go uruchomić) daje błędy; z okna Workbencha najczęściej takie, jak w dalszej części wiadomości.
Skończyły mi się pomysły na sensowne wytłumaczenie natury problemu. Proszę o pomoc; z góry dziękuję.

Executing SQL script in server

ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')

  REFERENCES `biblioteczka`.`wydawnictwa` ()

  ON DELETE NO ACTION

  ON UPDATE' at line 3





ALTER TABLE `biblioteczka`.`ksiazki` ADD COLUMN `idkategorie` INT(10) UNSIGNED NULL DEFAULT NULL  AFTER `idksiazki` , ADD COLUMN `idwydawnictwa` INT(10) UNSIGNED NULL DEFAULT NULL  AFTER `idkategorie` , ADD COLUMN `tytul` VARCHAR(45) NULL DEFAULT NULL  AFTER `idwydawnictwa` , ADD COLUMN `kategoria` VARCHAR(45) NULL DEFAULT NULL  AFTER `tytul` , ADD COLUMN `stron` VARCHAR(45) NULL DEFAULT NULL  AFTER `kategoria` , ADD COLUMN `ISBN` INT(10) UNSIGNED NULL DEFAULT NULL  AFTER `stron` , ADD COLUMN `tlumacz` VARCHAR(45) NULL DEFAULT NULL  AFTER `ISBN` , ADD COLUMN `data_wyd` VARCHAR(45) NULL DEFAULT NULL  AFTER `tlumacz` , ADD COLUMN `nr-wyd` VARCHAR(45) NULL DEFAULT NULL  AFTER `data_wyd` , ADD COLUMN `seria` VARCHAR(45) NULL DEFAULT NULL  AFTER `nr-wyd` , ADD COLUMN `stan` VARCHAR(25) NULL DEFAULT NULL  AFTER `seria` , ADD COLUMN `uwagi` VARCHAR(45) NULL DEFAULT NULL  AFTER `stan` , 

  ADD CONSTRAINT `idwydawnictwa`

  FOREIGN KEY ()

  REFERENCES `biblioteczka`.`wydawnictwa` ()

  ON DELETE NO ACTION

  ON UPDATE NO ACTION

, ADD INDEX `idwydawnictwa` () 



SQL script execution finished: statements: 3 succeeded, 1 failed

 

1 użytkowników online, w tym zalogowanych: 0, gości: 1