La forma correcta es encerrar las consultas en una
transacion siempre que trabajes con tablas InnoDB o BDB, pero yo veo una solución más sencilla si el campo fecha tiene formato fecha (Date) yo lo pasaria a DATETIME haria los cambios necesarios para que se guarde fecha y hora (H:m:s) y registraria las ventas sin preocuparme de buscar el numero correlativo, si tienes el momento exácto en que se han producido siempre las puedes ordenar... Dos ventas producidas en el mismo segundo tampoco tendrias forma de decidir cual es la primera...
La funcion
NOW() te pondra la fecha y hora en el momento que se preoduce el INSERT.
Quim