However, I would definitely advise you to have a unique index on (Parent, Pos), and to remove the IGNORE -- if an error occurs, you want to know about it.

You can make this safer by using a trigger for the assignment. You could also lock the table so no other inserts can happen during a particular insert. This is an expensive operation and can slow down the system if there is a heavy transaction load.