Infelizmente, usando apenas o MySQL isso é impossível. Ou pelo menos, praticamente. A maneira preferida seria usar as restrições SQL CHECK, que estão no padrão da linguagem SQL. No entanto, o MySQL não os suporta.
Veja:https://dev.mysql.com/doc /refman/5.7/en/create-table.html
Parece que o PostgreSQL suporta restrições CHECK em tabelas, mas não tenho certeza de quão viável é para você mudar de mecanismo de banco de dados ou se vale a pena usar esse recurso.
No MySQL, um gatilho pode ser usado para resolver esse problema, o que verificaria a sobreposição de linhas antes que a inserção/atualização ocorresse e geraria um erro usando o
SIGNAL
demonstração. (Veja:https://dev.mysql.com/doc/ refman/5.7/en/signal.html
) No entanto, para usar esta solução, você teria que usar uma versão atualizada do MySQL. Além das soluções SQL puras, isso normalmente é feito na lógica do aplicativo, portanto, qualquer programa que esteja acessando o banco de dados MySQL normalmente verifica esse tipo de restrição solicitando cada linha violada pela nova entrada em um
SELECT COUNT(id) ...
demonstração. Se a contagem retornada for maior que 0, isso simplesmente não ocorre na inserção/atualização.