Very little changes between MySQL but to say that "If its coded correctly" will not cause things to break is a very harsh statement

I know of at least two instances where MySQL have changed the way something happens and caused valid queries to break.
a very Popular one in v5 was the way they handled LEFT JOINS.
Below is (arguably) a valid query and would work fine right the way up to I think it was 5.1x.
SELECT a.`*`, b.`*`
FROM `table1` a, `table2` b
LEFT JOIN `table3` c ON c.`col1` = a.`col1`
WHERE a.`col1` = b.`col1'
This had to be changed to
SELECT a.`*`, b.`*`
FROM `table2` b, `table1` a
LEFT JOIN `table3` c ON c.`col1` = a.`col1`
WHERE a.`col1` = b.`col1'
They look the same its just the table ordering there is a good reason but a good example of how a small change can cause such greif especially in old scripts. but yes normally MySQL upgrades are painless.