recherche

Maison  >  Questions et réponses  >  le corps du texte

php - Comment MySQL ne peut-il pas insérer des données en double sans utiliser d'index?

Il y a deux champs dans le tableau, à savoir a et b.

Par exemple, l'enregistrement est le suivant :
1, 2
1, 3
2, 3
1, 3

Explication :
1 Parmi eux, 1 et 3 sont les données répétées.
2. Des données en double sont autorisées dans le tableau.

Problème : lorsque l'utilisateur sélectionne des données en double à ne pas ajouter à la base de données, les données ajoutées par l'utilisateur sont les suivantes.

2, 3
1, 4
1, 3

Seuls 1 et 4 peuvent être insérés, mais pas le reste. Comment répondre à cette exigence ? Désolé

PHP中文网PHP中文网2789 Il y a quelques jours620

répondre à tous(2)je répondrai

  • 伊谢尔伦

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

    Ce problème est plus facile à résoudre, utilisez le verrouillage optimiste, les étapes sont les suivantes :
    1. Créez la clé de hachage md5 (hashedKey) du tuple (1, 3) dans redis, et placez l'enregistrement correspondant dans la première requête dans redis;
    2. Lors de l'insertion d'un enregistrement, insérez d'abord la clé de hachage md5 du nouveau tuple (1,3) dans redis (mécanisme de verrouillage optimiste) Si elle ne peut pas être insérée, cela prouve que la clé existe déjà et que l'opération d'insertion est effectuée. est refusé. ;
    3. L'exemple d'algorithme de hachage est le suivant :

    function goHashed($a,$b,&$hashedKey)
    {
       //注意对a,b数据格式的判断和异常考虑
       const SALT = "Hello,world"
       $hashedKey = md5($a.SALT.$b.SALT)
    }

    === Après avoir bien examiné la question, il semble qu'elle doive être résolue en utilisant MySQL ===

    Si vous n'utilisez pas d'index, je n'ai vraiment pas de bonnes idées. Cependant, si vous pouvez créer un index, vous pouvez faire en sorte que a->b forme un champ d'une table d'index, et le type d'index est. index unique.Cela peut également résoudre le problème des insertions répétées.

    répondre
    0
  • 为情所困

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

    Le but de l'utilisation de contraintes uniques est de limiter les données en double au niveau de la couche de base de données.

    Si vous souhaitez renoncer à cette restriction, nous ne pouvons l'éviter que par la programmation.

    La solution la plus directe est qu'avant d'insérer des données, nous recherchons d'abord les données pour déterminer si le champ qui doit prendre en compte l'unicité existe déjà avec une valeur qui est sur le point d'être mise à jour. S'il existe, abandonnez la mise à jour, sinon effectuez la mise à jour. MAIS, cela ne peut toujours pas éviter la saisie de données répétées. Après tout, il existe toujours une situation de saisie répétée de données élevée. On peut seulement dire que cela réduit considérablement la probabilité de saisie répétée de données.

    Il est recommandé, lorsque des contraintes uniques peuvent être utilisées, d'essayer d'avoir des garanties de contraintes uniques. Après tout, c'est le dernier niveau de garantie pour le système.

    répondre
    0
  • Annulerrépondre