ホームページ  >  に質問  >  本文

php - mysql不使用索引如何做到不插入重复的数据?

表中有两个字段,分别是a,b。

例如记录如下
1,2
1,3
2,3
1,3

说明:
1.其中1,3才是重复的数据。
2.表里面是允许重复数据存在。

问题:当用户选择重复的数据不添加入库,这时如果用户添加的数据如下。

2,3
1,4
1,3

只能让1,4插入,其余都不可以,怎么实现这个需求?麻烦了

PHP中文网PHP中文网2734日前592

全員に返信(2)返信します

  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:00:10

    この問題は、楽観的ロックを使用する方が簡単に解決できます。手順は次のとおりです:
    1. (1, 3) タプルの md5 ハッシュ キー (hashedKey) を Redis に作成し、最初のクエリに対応するレコードを配置します。 redis;
    2. レコードを挿入するときは、まず新しい (1,3) タプルの md5 ハッシュ キーを redis (楽観的ロック メカニズム) に挿入します。これは、キーが既に存在することを証明し、挿入操作を実行します。 ;
    3. ハッシュ アルゴリズムの例は次のとおりです。 リーリー

    === 質問を詳しく見てみると、MySQL を使用して解決する必要があるようです ===

    インデックスを使用しない場合、特に良いアイデアはありませんが、インデックスを構築できれば、 a->b をインデックス テーブルのフィールドとして作成できます。インデックス タイプは次のとおりです。これにより、繰り返し挿入される問題も解決できます。

    返事
    0
  • 为情所困

    为情所困2017-05-16 13:00:10

    一意制約を使用する目的は、データベース層で重複データを制限することです。

    この制限を放棄したい場合は、プログラミングを通じてのみ回避できます。

    最も直接的な解決策は、データを挿入する前に、まずデータを検索して、一意性を考慮する必要があるフィールドが更新される値を持つフィールドが既に存在するかどうかを判断し、存在する場合は更新を中止し、そうでない場合は更新を実行します。しかし、それでも、繰り返しのデータ入力を避けることはできません。結局のところ、データの繰り返し入力の可能性が大幅に減少するとしか言えません。

    一意の制約を使用できる場合は、一意の制約を保証するように努めることをお勧めします。結局のところ、これはシステムの最後の保証層です。

    返事
    0
  • キャンセル返事