Eso es un problema de aplicaciones. Nada tiene que hacer la base de datos con ello.
El tema es que debes hacer que la aplicación consulte dos veces: una para verificar las existencias y otra para registrar la venta (si se hace). Pero el resolver qué mensaje mostrar al usuario, o como manejar la situación con la existencia, es un asunto del programa, no de la base.
Una de las claves de la optimización de las bases de datos consiste en no asignarle a la base tareas para las que no se diseñó y para las cuales no está optimizada.
SQL es un lenguaje de consultas (Structured Query Language). No es un lenguaje de aplicaciones.
El hecho que tenga funciones estadísticas, de cadenas, matemáticas y hasta espaciales, no quiere decir que sea un lenguaje de aplicaciones. Esas funciones existen para el uso EN las tablas de datos y CON los datos que se deben devolver.
Uno de los errores de los programadores de aplicaciones, es creer que una base de datos puede resolver todo.
No. No puede ni debe hacerlo. Para eso existe el PHP, ASP, Java, JavaScript, VBScript, VB, VB.Net, C#, Pyton, y otros muchos mas...