悲しいことに、MySQLだけを使用すると、これは不可能です。または少なくとも、実質的に。推奨される方法は、SQLCHECK制約を使用することです。これらはSQL言語標準にあります。ただし、MySQLはそれらをサポートしていません。
参照: https://dev.mysql.com/doc /refman/5.7/en/create-table.html
PostgreSQLはテーブルのCHECK制約をサポートしているようですが、データベースエンジンを切り替えることがどれほど実行可能か、またはその機能を使用するだけでも問題が発生する価値があるかどうかはわかりません。
MySQLでは、トリガーを使用してこの問題を解決できます。この問題は、挿入/更新が発生する前に重複する行をチェックし、SIGNAL
を使用してエラーをスローします。 声明。 (参照: https://dev.mysql.com/doc/ refman / 5.7 / en / signal.html
)ただし、このソリューションを使用するには、最新のMySQLバージョンを使用する必要があります。
純粋なSQLソリューションとは別に、これは通常、アプリケーションロジックで実行されるため、MySQLデータベースにアクセスするプログラムは通常、SELECT COUNT(id) ...
声明。返されたカウントが0より大きい場合、それは単に挿入/更新にはなりません。