Updating only certain fields on a database row
I think it is.

What you are asking for is known as UPSERT - a portmanteau of UPDATE and INSERT. Some databases support UPSERT intrinsically, but some don't. A quick search for "MySQL UPSERT" suggests that MySQL does not support an UPSERT keyword or the concept directly. However, as you discovered, the ON DUPLICATE KEY construct will simulate it.

That seems the best way to do it in MySQL. (In SQL Server you would probably use MERGE.)