Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MySql Workbench, klucz obcy, (errno: 150)
wNogachSpisz
post 5.02.2012, 18:12:34
Post #1





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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ę.



Ten post edytował wNogachSpisz 5.02.2012, 18:16:26
Go to the top of the page
+Quote Post
ActivePlayer
post 5.02.2012, 18:20:19
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
HgReed
post 5.02.2012, 18:21:40
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 13.11.2011

Ostrzeżenie: (0%)
-----


PHPMyAdmin (errno: 150):
Can't create table.

Chodzi o foreign key - najpierw stwórz tabele, do której się odwołujesz.
Go to the top of the page
+Quote Post
ActivePlayer
post 5.02.2012, 18:25:44
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


HgReed przeciez to jest jedno zapytanie;-)
Go to the top of the page
+Quote Post
wNogachSpisz
post 5.02.2012, 18:47:09
Post #5





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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ć?
Go to the top of the page
+Quote Post
ActivePlayer
post 5.02.2012, 18:49:53
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

Ostrzeżenie: (0%)
-----


chill zdarza się. Ja nie znam.

ps. latwo zagooglac kod błędu - wtedy bez problemu znajdziesz rozwiązanie.
Go to the top of the page
+Quote Post
wNogachSpisz
post 5.02.2012, 18:57:03
Post #7





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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..

Ten post edytował wNogachSpisz 5.02.2012, 20:42:40
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.05.2025 - 10:52