Non puoi aggiungere una colonna NOT NULL a una tabella che ha più di zero righe, quando la colonna è vincolata a valori che corrispondono a quelli nella tabella padre, e tuttavia ha solo valori NULL perché è una nuova colonna non popolata senza DEFAULT .
La soluzione alternativa è farlo in più fasi:aggiungi la colonna, ma non dichiararla NOT NULL e non dichiarare ancora la chiave esterna.
ALTER TABLE boys
ADD COLUMN toy_id INT;
Quindi compilalo con dati validi che corrispondono ad alcuni valori nella tabella dei giocattoli.
UPDATE boys SET toy_id = ...;
Quindi modifica la colonna in modo che NON sia NULL e crea il vincolo:
ALTER TABLE boys MODIFY COLUMN toy_id INT NOT NULL,
ADD CONSTRAINT toys_toy_id_fk
FOREIGN KEY(toy_id)
REFERENCES toys(toy_id);