Updating databases that user's can manipulate
One possible way is adding an is_deleted tinyint column, with 0 as default. Instead of deleting, you can set it to 1, and then filter these out in the queries. This way you always keep all countries that ever got into the table. 

In some previous projects of mine we had quite a lot of these, setting them using ON DELETE triggers.  In turn, the queries nearly all went to views that were defined with a condition in the WHERE clause like

...
AND is_deleted = 0 -- well, it was Postgres, so originally AND NOT is_deleted
...


The downside of this is an additional level of dependencies (or two). The other solution is changing the queries to filter out the rows that are marked as deleted.