Prosta baza i dziwny problem (errno 150)

Odpowiedz Nowy wątek
2011-10-29 14:01

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

0

Witajcie.

Mam takie 4 proste tabelki - prosty projekt który robię to coś w rodzaju aplikacji raportowania zleceń serwisowych. Jedna to dane firm, druga - dane części, trzecia - dane zleceń, a czwarta to tabela relacji wiele do wiele między częściami a zleceniami (w jednym zleceniu serwisowym mogło zostać wymienione wiele części). Oto one:

CREATE TABLE firmy
(
    id_firmy mediumint unsigned not null auto_increment primary key,
    nazwa varchar(50),
    adres varchar(50)
);
CREATE TABLE zgloszenia
(
    id_zgloszenia mediumint unsigned not null auto_increment primary key,
    id_firmy mediumint unsigned,
    data date,
    rodzaj varchar(20),
    nazwisko varchar(50),
    liczba_czesci int,
    koszt decimal(6,2),
    uwagi varchar(255),
    constraint FK_zg_firma foreign key(id_firmy) references firmy(id_firmy)
    on delete restrict
);
CREATE TABLE czesci_serwisowe
(
    id_czesci mediumint unsigned not null auto_increment primary key,
    nazwa varchar(40),
    marka varchar(40),
    model varchar(40),
    numer_seryjny varchar(40),
    ilosc int,
    cena decimal(6,2)
);
CREATE TABLE zgloszenia_czesci
(
    id_rekordu mediumint unsigned not null auto_increment primary key,
    id_czesci mediumint unsigned not null,
    id_zgloszenia mediumint unsigned not null
);

Ostatnia tabelka nie ma określonych kluczy obcych, bo tu właśnie jest problem - dziwny, otóż określenie klucza obcego na id_zgloszenia:

ALTER TABLE zgloszenia_czesci ADD
constraint FK_uc_zgloszenie foreign key(id_zgloszenia) references zgloszenia(id_zgloszenia) on delete restrict;

wykonuje się poprawnie, natomiast w identyczny sposób określenie klucza obcego na id_czesci:

ALTER TABLE zgloszenia_czesci ADD
constraint FK_uc_czesc foreign key(id_czesci) references czesci(id_czesci) on delete restrict;

zwraca komunikat: ERROR 1005 (HY0000): Can't create table 'serviceform.#sql-7fc_2' (errno: 150)

Otrzymany błąd mi nic nie mówi poza tym, że śmierdzi linuksem.
Szukałem różnych informacji na ten temat, każda propozycja rozwiązania była inna, ale wszystkie łączyło jedno - w moim przypadku nie działały.

Dzięki z góry za wszelką pomoc.

Pozostało 580 znaków

2011-10-29 14:20

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

gdzie jest ta tabela czesci?? Bo ja widzę tylko czesci_serwisowe


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
edytowany 1x, ostatnio: Misiekd, 2011-10-29 14:21

Pozostało 580 znaków

2011-10-29 16:04

Rejestracja: 10 lat temu

Ostatnio: 8 lat temu

0

uhm, FAIL.
Tak to jest jak zamiast 'czesci doesn't exist/not declared' dostaje się 'errno 150' - co jednak nie zmienia faktu, że powinienem to zauważyć.
Dzięki i pozdrawiam!

Pozostało 580 znaków

2011-10-29 16:19

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

0
  1. pisze, że nie może stworzyć tabeli
  2. wpisujesz w google "mysql 1005" bo kod błędu to nie 150 tylko 1005
  3. i masz http://dev.mysql.com/doc/refm[...]-foreign-key-constraints.html gdzie ten błąd jest opisany (CTRL+F i pisujesz 1005)

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

Odpowiedz

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