MySQL is changing the way foreign key constraints and cascades are managed. Starting with MySQL 9.6, foreign key validation and cascade actions are handled by the SQL layer rather than the InnoDB ...
At my company every foreign key has a NOT NULL constraint on it, and if it really needs to be null in some cases, a default value is assigned (like 999999) and given a row in the referring table like ...