Non. La valeur de la clause DEFAULT doit être une constante. (La seule exception à cette règle est l'utilisation de CURRENT_TIMESTAMP
comme valeur par défaut pour un TIMESTAMP
colonne.)
Comme alternative, vous pouvez utiliser un TRIGGER pour définir une valeur pour une colonne lorsqu'une ligne est insérée ou mise à jour.
Par exemple, dans un déclencheur BEFORE INSERT FOR EACH ROW, vous pouvez effectuer des calculs à partir des valeurs fournies pour d'autres colonnes et/ou interroger des données d'autres tables.
MODIFIER
Pour l'exemple donné dans l'EDIT de la question, un exemple de point de départ pour une définition de déclencheur :
CREATE TRIGGER mytable_bi
BEFORE INSERT ON mytable
FOR EACH ROW
BEGIN
SET NEW.percentage = (100.0 * NEW.marks) / NULLIF(NEW.total_marks,0);
END