• 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

Object Storage Arubacloud
0 głosów
2,995 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ź 359 wizyt
0 głosów
2 odpowiedzi 3,329 wizyt
pytanie zadane 4 lutego 2018 w SQL, bazy danych przez `Krzychuu Stary wyjadacz (13,940 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...