Those are called upserts and the SQL 03 standard for that (may not be implemented in your database) is called
merge. If that is not implemented and no other variants exist you can do an update followed by an insert of everything that is not found.
In any case variants of Perrin's solution is the standard way to do it. Load a temporary table, then do the update within the database. If there is The primary key index should not be dropped, but all other indexes can be, and then can be re-created. With a good database that should be the most efficient way to go.