Replacing birth year column values with calculated age value
First, as dnoeth commented, why are you doing this job in mass rather than calculating on the fly? You might have a good reason, but you never clarified.  Of course the best way to lighten the load would be not to do this task at all.

Second, as 200_success commented, you are damaging your database design by writing age data into a birth_year column.

If you MUST run this procedure and you MUST overwrite the birth_year, then I have some advice for your single-query approach:


You should consistently use all caps when writing mysql keywords and functions for readability.
You should try to minimize the number function calls and overall length of your query.
Because, I assume, you have covered all potential outcomes with your table data in your CASE conditions, there should be no logical requirement for the null outcome.  Furthermore, because there are only 2 outcomes, I would opt for an IF statement rather than the more verbose CASE statement.
Depending on the possibility of a null value in birth_year, you may need to include another IF or COALESCE call to mitigate that data challenge.


SQL (D.R.Y.):

UPDATE table_name
SET birth_year = YEAR(GETDATE()) - birth_year - IF(birth_month IS NULL OR birth_month &lt;= MONTH(GETDATE()), 0, 1) 
FROM table_name