Hi Alex,

May I assume that it's also not quite as trivial as doing something
like this:

CONSTRAINT `valid_phone` CHECK (`phoneno` regexp '^0[1-8][0-9]{8}$')
Correct. It does its own conflict detection as UNIQUE keys can't 
represent it.

I wasn't thinking that the CONSTRAINT needs to be UNIQUE, the above is a CHECK ... which could potentially use a stored function to perform the check ... timing could then possibly again be an issue depending on whether the function will still see the old data or not (https://mariadb.com/kb/en/constraint/#check-constraints has some info, but testing will be required).  "One can use most deterministic functions in a constraint, including UDFs."

Kind regards,
Jaco