値が繰り返される列の既存のテーブルに主キーを作成することは可能ですか? 以前のレコードは検証されませんが、新しいレコードはこれで検証されます.mysqlで可能ですか. Oracleで可能であることは知っていますが(ここに例があります)、mysqlについてはわかりません。
3 に答える
Nerd-Herd's answer へのコメントとして投稿したリンクは、遅延制約を使用しています。これらの制約は、ステートメントの実行時ではなく、トランザクションの最後にチェックされます。
MySQL は遅延制約をサポートしていません
遅延制約が絶対に必要で、オープン ソース データベースを使い続けたい場合は、PostgreSQL に移行する必要があります。
いいえ、それはできません。主キーの意味に違反しています。ただし、複合主キーが必要な場合は、可能かもしれません
主キーは常に一意の識別子です。一意でないようにすると、識別子ではなくなります。なぜそれを繰り返したいのですか? 繰り返されるフィールドを持つ複数のエントリがある場合、そのフィールドは主キーではありませんが、主キーを提供する別のフィールドと組み合わせることができます (あまりお勧めできませんが、このフィールドにタイムスタンプを追加することができます)。結合された主キーを入力します)。
この場合、自動インクリメントキーを作成し、通常のフィールドとして繰り返すこのフィールドを使用することをお勧めします。検索を改善するためにインデックスを追加することもできます。どのフィールドでもレコードを検索できますが、主キーではないからといって、検索して取得できないわけではありません。主キーの考え方は、1 つまたは複数ではなく、1 つだけのレコードを取得することです。