Partage
  • Partager sur Facebook
  • Partager sur Twitter

transaction SQL - Violation de clé unique

Sujet résolu
    19 juillet 2021 à 13:10:44

    Bonjour la communauté,

    J’ai une question par rapport à la transaction SQL (Ms sql server) ci-dessous :

    BEGIN TRANSACTION NEW_OBJECT
    Declare @ID 
    int
    select
     @ID=ID from OBJECTS where ID_INT=@ID_INT and OBJTYPE_ID=@OBJTYPE_ID
    If
     @ID Is null
    BEGIN
    exec @
    ID=SPnextkey
    insert into 
    OBJECTS(ID,ID_INT,OBJTYPE_IDvalues(@ID,@ID_INT,@OBJTYPE_ID)
    END

    select
      @ID AS ID
    COMMIT TRANSACTION NEW_OBJECT

    Il existe une contrainte de clé unique, qu’on appellera UK1, sur la table "OBJECTS" avec les champs "ID_INT" et "OBJTYPE_ID".

    Je pensais qu’exécuter le “SELECT” et l’”INSERT” dans la même transaction permettait de s’assurer qu’aucune opération de modification n’était effectuée sur la table "OBJECTS" pendant la transaction.

    Cependant, je me suis aperçu que cela n’était pas le cas, sur des traitements lourds, j’ai obtenu une violation de clef sur UK1.

    Une âme charitable pourrait m’éclairer SVP ? la transaction ne permet-elle pas de garantir que le "SELECT" et l'"INSERT" sont exécutés de manière atomique ?
    Existe-t-il une best pratice par rapport à ce besoin (verif existence avant insert, et recup ID du nouvel objet, ou de l’existant)?

    • Partager sur Facebook
    • Partager sur Twitter
      2 août 2021 à 10:48:33

      Bonjour,

      Mickael Kyle a écrit:

      la transaction ne permet-elle pas de garantir que le "SELECT" et l'"INSERT" sont exécutés de manière atomique ?

      Non, la transaction permet d'assurer le traitement complet de ce qu'elle contient ou d'avoir un ROLLBACK si cela se passe mal.

      Elle n'empêche pas d'autres transactions simultanées.

      Cela se fera avec un verrou (LOCK).

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

      transaction SQL - Violation de clé unique

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown