Não altere seu design de banco de dados em tempo de execução, mas projete-o de forma que você altere os dados e não a estrutura.
Você poderia ter duas mesas. Um chamado
Student com colunas rollno e name , talvez PK em rollno se for único. Em seguida, tenha outra tabela chamada
Thing (qualquer nome adequado, mas não sei sobre o que são seus dados) com três colunas when (datahora), value (qualquer nome adequado) (CHAR(1)) e student (mesmo tipo que rollno ). Defina PK sobre ambos
when e value para garantir que cada aluno tenha apenas um valor por data. Defina um FK de Thing.student para Student.rollno . Agora seu banco de dados cuida de manter seus dados (principalmente) consistentes. Defina índices de acordo com suas necessidades de seleções, inserções e atualizações nas diferentes colunas.
Em seguida, para consultar, junte as duas tabelas para obter o resultado desejado, por exemplo.
select s.name, t.value
from Student s
left join Thing t on t.student = s.rollno
where t.when == 'whenever'
(Não tenho certeza sobre o dialeto mysql, então talvez sejam necessárias mais algumas citações. Sinta-se à vontade para editar.)