Lamentablemente, usar solo MySQL es imposible. O al menos, prácticamente. La forma preferida sería usar restricciones SQL CHECK, estas están en el estándar del lenguaje SQL. Sin embargo, MySQL no los admite.
Ver:https://dev.mysql.com/doc /refman/5.7/en/create-table.html
Parece que PostgreSQL admite las restricciones CHECK en las tablas, pero no estoy seguro de cuán viable es para usted cambiar el motor de la base de datos o si vale la pena usar esa función.
En MySQL, se podría usar un disparador para resolver este problema, que verificaría si hay filas superpuestas antes de que ocurra la inserción/actualización y arrojaría un error usando SIGNAL
declaración. (Ver:https://dev.mysql.com/doc/ refman/5.7/en/señal.html
) Sin embargo, para usar esta solución, debe usar una versión actualizada de MySQL.
Aparte de las soluciones SQL puras, esto generalmente se hace en la lógica de la aplicación, por lo que cualquier programa que acceda a la base de datos MySQL generalmente verifica este tipo de restricciones solicitando cada fila que la nueva entrada viole en un SELECT COUNT(id) ...
declaración. Si el recuento devuelto es mayor que 0, simplemente no se inserta/actualiza.