• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd z kluczem obcym przy tworzeniu prostej tabeli. Kod błędu: 150

0 głosów
4,020 wizyt
pytanie zadane 2 września 2019 w SQL, bazy danych przez ziemniak3210z Nowicjusz (210 p.)

Do prostej bazy "księgarnia" z 5 odcinka kursu MySQL (LINK) postanowiłem dodać dodatkową tabelę w kodzie SQL, zawierającą klucz obcy do tabeli klienci. Niestety przy próbie dodania niniejszej tabeli wyskakuje mi błąd. Nie mam pojęcia co może być źle, wydaje mi się, że ze składnią wszystko w porządku...

Kod: 

CREATE TABLE portfel (
    idportfela int NOT NULL PRIMARY KEY,
    idklienta int(11) NOT NULL,
     FOREIGN KEY (idklienta) REFERENCES klienci (idklienta)
);

Błąd:

#1005 - Nie można stworzyć tabeli `ksiegarnia`.`portfel` (Kod błędu: 150 "Foreign key constraint is incorrectly formed")

1 odpowiedź

+1 głos
odpowiedź 2 września 2019 przez dominx99 Użytkownik (860 p.)
wybrane 2 września 2019 przez ziemniak3210z
 
Najlepsza
A mógłbyś pokazać strukturę tabeli klienci? jesteś pewien, że idklienta w tabeli klienci jest ustawione jako primary key?
komentarz 2 września 2019 przez ziemniak3210z Nowicjusz (210 p.)

Wszystko jest tak, jak zostało udostępnione przez Mirosława

CREATE TABLE IF NOT EXISTS `klienci` (
  `idklienta` int(11) NOT NULL AUTO_INCREMENT,
  `imie` text COLLATE utf8_polish_ci NOT NULL,
  `nazwisko` text COLLATE utf8_polish_ci NOT NULL,
  `miejscowosc` text COLLATE utf8_polish_ci NOT NULL,
  PRIMARY KEY (`idklienta`),
  KEY `id` (`idklienta`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=11 ;

 

komentarz 2 września 2019 przez dominx99 Użytkownik (860 p.)

Hmmm, nie jestem specem od baz danych, ale właśnie trafiłem na taki fragment:

Zawsze uważano silnik MyISAM jako taki, który szybciej wykonuje zapytania SELECT, prościej się nim zarządza, wykonuje kopie zapasowe czy odtwarza dane. Natomiast InnoDB uważany był za wolniejszy, jednak wspierający transakcje i klucze obce.

Usunąłem "ENGINE=MyISAM" ten fragment i u mnie działa.
 

DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=11;

CREATE TABLE klienci (
  `idklienta` int(11) NOT NULL AUTO_INCREMENT,
  `imie` text COLLATE utf8_polish_ci NOT NULL,
  `nazwisko` text COLLATE utf8_polish_ci NOT NULL,
  `miejscowosc` text COLLATE utf8_polish_ci NOT NULL,
  PRIMARY KEY (`idklienta`),
  KEY `id` (`idklienta`)
);

CREATE TABLE portfel (
    idportfela int NOT NULL PRIMARY KEY,
    idklienta int(11) NOT NULL,
    FOREIGN KEY (idklienta) REFERENCES klienci (idklienta)
);

 

komentarz 2 września 2019 przez ziemniak3210z Nowicjusz (210 p.)
Masz rację, to wina tego silnika. Gdy usunąłem ten fragment, zaczęło działać. Dzięki za pomoc, mistrzu!

Podobne pytania

0 głosów
1 odpowiedź 950 wizyt
0 głosów
2 odpowiedzi 4,392 wizyt
pytanie zadane 4 lutego 2018 w SQL, bazy danych przez `Krzychuu Stary wyjadacz (13,940 p.)

93,773 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,378 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...