Well now. As is, of course, my queries wont solve all your problems. I was hoping you would see how to extend the principle to your needs.
The only unique index you can create on these is a joint index on the 2 columns.
To generate the equivalent in the base table you need to join it to itself - but join every row to every row:
$matrix = "SELECT nos.int AS xcoord, nos1.int AS ycoord FROM nos, nos AS nos1";
That will return 100 rows - the full matrix of x and y coordinates.
Now, to slect one that has not been used you do the left join to that.
$rand_xy = "SELECT m.xcoord, m.ycoord FROM
(SELECT nos.int AS xcoord, nos1.int AS ycoord FROM nos, nos AS nos1) AS m
LEFT JOIN people p ON(m.xcoord=p.xcoord AND m.ycoord=p.ycoord)
WHERE p.xcoord IS NULL AND p.ycoord IS NULL
ORDER BY RAND LIMIT 1";
The subquery in the FROM clause returns a table called m with the full matrix that you can join to just like any table you read from disk.
You can even dispense with the disk table containing the range 0-9 and just create a memory table in the query itself, but I thought that might confuse the issue for people.