Mam następujący skrypt do tworzenia tabeli w MySQL w wersji 5.1, który ma odnosić się do 3 innych tabel. Wszystkie 3 tabele zostały utworzone przy użyciu InnoDB, a wszystkie 3 tabele mają kolumnę ID zdefiniowaną jako INT.kluczy obcych i MySQL Błędy
Z powodzeniem utworzyłem inne tabele, które odwołują się do KONTA i OSOBY, jednak jest to pierwsza tabela, która odwołuje się do ADRESU, więc dodałem definicję dla tej tabeli, tak samo jak uruchom, poniżej.
Błąd który Dostaję jest ERROR 1005 (HY000) z errno 150, który rozumiem zostać odnoszące się do stworzenia klucza obcego.
Skrypt, który nie jest (dodatkowe kolumny usunięte dla uproszczenia):
CREATE TABLE WORK_ORDER (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ACCOUNT_ID INT NOT NULL,
CUSTOMER_ID INT NOT NULL,
SALES_ID INT,
TRADES_ID INT,
LOCATION_ID INT NOT NULL,
INDEX CUST_INDEX(CUSTOMER_ID),
INDEX SALES_INDEX(SALES_ID),
INDEX TRADES_INDEX(TRADES_ID),
INDEX ACCOUNT_INDEX(ACCOUNT_ID),
INDEX LOCATION_INDEX(LOCATION_ID),
FOREIGN KEY (CUSTOMER_ID) REFERENCES PERSON(ID) ON DELETE CASCADE,
FOREIGN KEY (SALES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
FOREIGN KEY (TRADES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
FOREIGN KEY (LOCATION_ID) REFERENCES ADDRESS(ID) ON DELETE SET NULL
) ENGINE=InnoDB;
Instrukcja SQL używane do tworzenia tabeli adres jest poniżej (dodatkowe kolumny usunięte dla uproszczenia).
CREATE TABLE ADDRESS (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
PERSON_ID INT NOT NULL,
ACCOUNT_ID INT NOT NULL,
ADDRESS_L1 VARCHAR(50),
ADDRESS_L2 VARCHAR(50),
CITY VARCHAR(25),
PROVINCE VARCHAR(20),
POSTAL_CODE VARCHAR(6),
COUNTRY VARCHAR(25),
INDEX CUST_INDEX(PERSON_ID),
INDEX ACCOUNT_INDEX(ACCOUNT_ID),
FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
FOREIGN KEY (PERSON_ID) REFERENCES PERSON(ID) ON DELETE CASCADE
) ENGINE=InnoDB;
ja przeglądałem przez kilka pytań tutaj do czynienia z podobnymi problemami, ale większość z nich wydaje się być zduplikowane definicje i typy pól nie pasujące, jak również niektóre nie używając InnoDB dla jednej lub drugiej z tabel. Jednak żaden z nich nie wydaje się być problemem. Jakieś pomysły?
Twój DELETE akcja na kluczu LOCATION_ID nie wygląda całkiem dobrze, ponieważ LOCATION_ID jest zdefiniowany jako NOT NULL. Nie myślałem, że mysql sprawdził to podczas tworzenia więzów, chociaż ... – grossvogel
Dzięki, to zadziałało! Opublikuj jako odpowiedź i zaznaczę to poprawnie. – Elie