5

私は非常に単純な問題とうまくいく解決策を持っていますが、もっと単純なものを探しています。

複数の値が既存の値と等しい場合に、行がデータベースに追加されないようにしたいと考えています。たとえば、a2=a1 AND b2=b1 の場合、データは拒否されます。a2=a1 のみ、または b2=b1 のみの場合は許可されます。基本的に、両方の値が一致する必要がある主キーのように機能させたいと考えています。

データベースに書き込む前に、検証を通じてこれを実行できることを知っています--ex。* where a='a2' and b='b2' を選択し、結果が得られたときに新しいデータを書き込まないようにします。私がむしろしたいのは、このようなデータを自動的にブロックする、主キーなどの MySQL 設定を有効にすることです。

私は基本的な機能以外の MySQL にあまり詳しくないので、これが簡単である場合は申し訳ありません。一意のインデックスと主キーに関するあらゆる種類のグーグル検索は役に立ちませんでした。

4

3 に答える 3

10

一意にする列の一意のインデックスを作成します。

例えば:

CREATE UNIQUE INDEX index_name ON table(col1, col2);

MySQL Create index マニュアルを参照してください。

于 2008-12-05T01:12:09.173 に答える
0

CONSTRAINTテーブルを作成する (または既存のテーブルを変更する) ときに MySQL 構文を使用したい。

于 2008-12-05T01:13:45.863 に答える
0

gcores の言うことに加えて、アプリケーション層での検証という別の提案は悪いことだと付け加えたいと思います。2 つのアプリケーションが同じデータを挿入しようとしていて、それらがインターリーブされている場合はどうなりますか? 両方ともチェックし、データが存在しないことを確認してから、両方が挿入される場合があります。一意のインデックスを使用すると、次の 2 つの利点があります。

  • ユーザーは、値が存在するかどうかを確認する必要はありません。彼らは単純に操作を試み、それが失敗した場合、それは値がすでに存在していたことを意味します。これにより、データベースの負荷がわずかに軽減され、アプリケーション ロジックが単純になります。
  • データベース自体がルールを適用しているため、データベースは常に有効です。「重複はないと予想されますが、技術的には可能です...」というくだらないことよりも、厳格なルールについて推論できる場合、データベースでの作業がはるかに簡単になります。
于 2008-12-05T02:17:43.237 に答える