Niestety, używając tylko MySQL jest to niemożliwe. A przynajmniej praktycznie. Preferowanym sposobem byłoby użycie ograniczeń SQL CHECK, które są w standardzie języka SQL. Jednak MySQL ich nie obsługuje.
Zobacz:https://dev.mysql.com/doc /refman/5.7/en/create-table.html
Wygląda na to, że PostgreSQL obsługuje ograniczenia CHECK na tabelach, ale nie jestem pewien, jak opłacalne jest przełączanie silnika bazy danych lub czy jest to w ogóle warte zachodu, aby użyć tej funkcji.
W MySQL do rozwiązania tego problemu można użyć wyzwalacza, który sprawdziłby nakładające się wiersze przed wstawieniem/aktualizacją i wyrzuciłby błąd za pomocą SIGNAL
oświadczenie. (Patrz:https://dev.mysql.com/doc/ refman/5.7/pl/sygnał.html
) Jednak aby skorzystać z tego rozwiązania, musisz użyć aktualnej wersji MySQL.
Oprócz czystych rozwiązań SQL, zwykle odbywa się to w logice aplikacji, więc każdy program uzyskujący dostęp do bazy danych MySQL zazwyczaj sprawdza tego rodzaju ograniczenia, żądając każdego wiersza, który jest naruszony przez nowy wpis w SELECT COUNT(id) ...
oświadczenie. Jeśli zwrócona liczba jest większa niż 0, po prostu nie ma to wpływu na wstawianie/aktualizację.