Sie können eine solche Einschränkung leider nicht erstellen, da der Fremdschlüssel immer auf einer übergeordneten Tabelle basiert.
Was Sie tun können, ist, den Trigger zu erstellen, der Ihre Eingabedaten nach ihrem Typ testet und unangemessene Änderungen rückgängig macht:
Etwa so:
CREATE TRIGGER insert_stock_child
BEFORE INSERT
ON stock
FOR EACH ROW
BEGIN
IF new.type = 'BOOK_TYPE' AND (SELECT COUNT(*) FROM book
WHERE book.bookID = new.itemID)= 0
THEN
INSERT error_msg VALUES ('No such book!');
END IF;
END;
-- same logic for the cd table