Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySql Workbench, klucz obcy
Forum PHP.pl > Forum > Bazy danych > MySQL
wNogachSpisz
Próbuje stworzyć projekt bazy danych przy pomocy mysql workbench.
Diagram wygląda tak:



Program generuje następujący kod SQL tworzący bazę danych:
Kod
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 `address_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `address_db`;

-- -----------------------------------------------------
-- Table `address_db`.`city`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `address_db`.`city` (
  `id` INT NOT NULL ,
  `name` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `address_db`.`address`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `address_db`.`address` (
  `id` INT NOT NULL ,
  `city` VARCHAR(45) NULL ,
  INDEX `fk_address_city` (`city` ASC) ,
  PRIMARY KEY (`id`) ,
  CONSTRAINT `fk_address_city`
    FOREIGN KEY (`city` )
    REFERENCES `address_db`.`city` (`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;


Natomiast phpMyAdmin przy próbie uruchomienia tego kodu zwraca błąd:
Kod
Error

SQL query:

-- -----------------------------------------------------
-- Table `address_db`.`address`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `address_db`.`address` (
`id` INT NOT NULL ,
`city` VARCHAR( 45 ) NULL ,
INDEX `fk_address_city` ( `city` ASC ) ,
PRIMARY KEY ( `id` ) ,
CONSTRAINT `fk_address_city` FOREIGN KEY ( `city` ) REFERENCES `address_db`.`city` (
`id`
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = InnoDB;

MySQL said:  
#1005 - Can't create table 'address_db.address' (errno: 150)




Czy ktoś mógłby mi wyjaśnić w czym leży problem i jak go naprawić?
Z góry dziękuję za pomoc.

Uwaga!
Jeśli nie jesteś w stanie znaleźć i wskazać błędu w powyższym zapytaniu SQL,
to uprzejmie proszę, nie wypowiadaj się.

ActivePlayer
w address city jest varchrem a powinno byc tego samego typu co pole do ktorego tworzysz relacje.

w ogole cos pokaszaniłes bo Ci powinno zaznaczyc na wykresie co jest kluczem obcym a tego nie robi. uzyj mysql workbenchowego narzędzia do tworzenia relacji (bodajrze pod cyferką 2 jest to co Cie interesuje)
HgReed
PHPMyAdmin (errno: 150):
Can't create table.

Chodzi o foreign key - najpierw stwórz tabele, do której się odwołujesz.
ActivePlayer
HgReed przeciez to jest jedno zapytanie;-)
wNogachSpisz
Oh snap, jak mogłem tak zlamić smile.gif Oczywiście że typy są inne.. Miałem bardziej skomplikowany przykład i widocznie przy upraszczaniu się walnąłem..
Dlaczego workbench nigdzie nie komunikuje o takim błędzie? Jak to najwygodniej debudować?
ActivePlayer
chill zdarza się. Ja nie znam.

ps. latwo zagooglac kod błędu - wtedy bez problemu znajdziesz rozwiązanie.
wNogachSpisz
Cytat(ActivePlayer @ 5.02.2012, 18:49:53 ) *
ps. latwo zagooglac kod błędu - wtedy bez problemu znajdziesz rozwiązanie.

Jasne, tyle że wyszedłem od bardziej skomplikowanego przykładu, gdzie zadbałem o typy danych i dostawałem ten sam komunikat. Teraz tamten przykład uproszczę z większą uwagą i miejmy nadzieje że uda się zreprodukować błąd..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.