First Schema for Location and Countries
For all it's worth, and this is pretty old but for the sake of clearing unanswered reviews, here is my take:


id INT AUTO_INCREMENT PRIMARY KEY,

I find that being more specific in column names makes the code easier to work with, especially when you are using JOIN and table aliases. Suppose the following:

SELECT l.*, c.*
FROM location AS l
LEFT JOIN country AS c
ON l.loc = c.loc


The result set would have column headers as l.id and c.id unless you took the time to make column aliases for everything. If your columns were instead named location_id and country_id the result set would be much easier to read to someone who is not a database programmer. 
name VARCHAR(20)

I think 20 may be a bit short for country name. For instance: 

SELECT CHAR_LENGTH('United States of America');


Result: 24


Other than that I think it looks fine.