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.)