/ / MySQL - klucz obcy ograniczony przez klucz podstawowy w tej samej tabeli, błąd nr 1452 - mysql

MySQL - klucz obcy ograniczony przez klucz podstawowy w tej samej tabeli, błąd nr 1452 - mysql

Stworzyłem tabelę, w której cat_parent_id jest kluczem obcym jest ograniczony przez klucz podstawowy cat_id, używając tego:

CREATE TABLE categories (
cat_id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cat_parent_ID SMALLINT,
cat_name VARCHAR(40)

INDEX cat_id(cat_id),
FOREIGN KEY(cat_id) REFERENCES categories(cat_id),
);

Kiedy próbuję wstawić rekord, gdzie cat_parent_ID jest NULL, Pojawia się błąd:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`myDatabase`.`categories`, CONSTRAINT `categories_ibfk_1` FOREIGN KEY (`cat_id`) REFERENCES `categories` (`cat_id`))

W jaki sposób ograniczenie klucza obcego może się nie powieść, gdy na początku nie ma klucza obcego? Czy ograniczenie jest możliwe tylko wtedy, gdy wartość null jest niedozwolona?

Mogę tylko wstawiać rekordy z powodzeniem, jeśli wyłączę ograniczenie, co nie jest tym, czego chcę. potrzebuję parent_id być opcjonalne, a jeśli ma wartość, to musi istnieć cat_id tylko

Odpowiedzi:

0 dla odpowiedzi № 1

Spowoduje to utworzenie okrągłego klucza obcego, który uniemożliwi wstawienie do tabeli.

FOREIGN KEY(cat_id) REFERENCES categories(cat_id),

EDYCJA: Być może chciałeś włączyć PK cat_parent_id?


0 dla odpowiedzi nr 2

Masz jeden rekord główny, który nie ma rodzica, w tym przypadku musisz najpierw wyłączyć ograniczenia klucza obcego.

SET FOREIGN_KEY_CHECKS=0;

Wstaw rekord.

Nie zapomnij o ponownym ograniczeniu klucza obcego

SET FOREIGN_KEY_CHECKS=1;

Następnie od teraz upewnij się, że wstawki zawierają istniejący element nadrzędny.

W jaki sposób ograniczenie klucza obcego może się nie powieść, gdy nie ma klucza obcego najpierw? Czy ograniczenie jest możliwe tylko wtedy, gdy wartość null jest niedozwolona?

Jeśli chcesz dodać inne rekordy, które nie mają wartości FK, upewnij się, że dozwolona jest wartość NULL.