No. Il valore per la clausola DEFAULT deve essere una costante. (L'unica eccezione a questa regola è l'uso di CURRENT_TIMESTAMP
come valore predefinito per un TIMESTAMP
colonna.)
In alternativa, puoi utilizzare un TRIGGER per impostare un valore per una colonna quando una riga viene inserita o aggiornata.
Ad esempio, all'interno di un trigger PRIMA INSERIRE PER OGNI RIGA, puoi eseguire calcoli dai valori forniti per altre colonne e/o interrogare dati da altre tabelle.
MODIFICA
Per l'esempio fornito nell'EDIT della domanda, un esempio di punto di partenza per una definizione di trigger:
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