2

値が繰り返される列の既存のテーブルに主キーを作成することは可能ですか? 以前のレコードは検証されませんが、新しいレコードはこれで検証されます.mysqlで可能ですか. Oracleで可能であることは知っていますが(ここに例があります)、mysqlについてはわかりません。

4

3 に答える 3

6

Nerd-Herd's answer へのコメントとして投稿したリンクは、遅延制約を使用してます。これらの制約は、ステートメントの実行時ではなく、トランザクションの最後にチェックされます。

MySQL は遅延制約をサポートしていません

遅延制約が絶対に必要で、オープン ソース データベースを使い続けたい場合は、PostgreSQL に移行する必要があります。

于 2012-07-23T07:10:28.883 に答える
3

いいえ、それはできません。主キーの意味に違反しています。ただし、複合主キーが必要な場合は、可能かもしれません

于 2012-07-16T09:38:12.477 に答える
2

主キーは常に一意の識別子です。一意でないようにすると、識別子ではなくなります。なぜそれを繰り返したいのですか? 繰り返されるフィールドを持つ複数のエントリがある場合、そのフィールドは主キーではありませんが、主キーを提供する別のフィールドと組み合わせることができます (あまりお勧めできませんが、このフィールドにタイムスタンプを追加することができます)。結合された主キーを入力します)。

この場合、自動インクリメントキーを作成し、通常のフィールドとして繰り返すこのフィールドを使用することをお勧めします。検索を改善するためにインデックスを追加することもできます。どのフィールドでもレコードを検索できますが、主キーではないからといって、検索して取得できないわけではありません。主キーの考え方は、1 つまたは複数ではなく、1 つだけのレコードを取得することです。

于 2012-07-16T09:39:42.227 に答える