How insert register if not exist - trigger mysql











up vote
0
down vote

favorite












I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following



BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;


my trigger does not work, it does not validate and it allows entering the duplicates










share|improve this question






















  • Can you add the delimiter setting and the rest of the trigger please.
    – P.Salmon
    Nov 8 at 18:35












  • Is this a one off thing, or an on going check you want to perform for every insert?
    – DarbyM
    Nov 8 at 19:35















up vote
0
down vote

favorite












I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following



BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;


my trigger does not work, it does not validate and it allows entering the duplicates










share|improve this question






















  • Can you add the delimiter setting and the rest of the trigger please.
    – P.Salmon
    Nov 8 at 18:35












  • Is this a one off thing, or an on going check you want to perform for every insert?
    – DarbyM
    Nov 8 at 19:35













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following



BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;


my trigger does not work, it does not validate and it allows entering the duplicates










share|improve this question













I have a list of records that I have to insert, but I do not want duplicates to be inserted with the same fields, I need to verify if this record exists and do not insert it and continue to analyze the following



BEGIN
IF NOT EXISTS (SELECT * FROM Leads WHERE n_documento = new.n_documento AND programa = new.programa) THEN
INSERT INTO Leads
VALUES
(NULL, new.nombres, new.apellidos, new.n_documento, new.fecha_de_nacimiento, new.telefono, new.email, new.ciudad,
new.pais, new.anos_de_experiencia, new.origen, new.informacion_adicional, new.fecha, new.programa, new.estado, new.fecha_charla,
new.grado_de_estudio, new.empresa, new.cargo, null);
END IF;


my trigger does not work, it does not validate and it allows entering the duplicates







mysql






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 8 at 17:52









Bryan Rivera

83




83












  • Can you add the delimiter setting and the rest of the trigger please.
    – P.Salmon
    Nov 8 at 18:35












  • Is this a one off thing, or an on going check you want to perform for every insert?
    – DarbyM
    Nov 8 at 19:35


















  • Can you add the delimiter setting and the rest of the trigger please.
    – P.Salmon
    Nov 8 at 18:35












  • Is this a one off thing, or an on going check you want to perform for every insert?
    – DarbyM
    Nov 8 at 19:35
















Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35






Can you add the delimiter setting and the rest of the trigger please.
– P.Salmon
Nov 8 at 18:35














Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35




Is this a one off thing, or an on going check you want to perform for every insert?
– DarbyM
Nov 8 at 19:35












2 Answers
2






active

oldest

votes

















up vote
0
down vote













Handling this in a trigger is not the best or most efficient place to handle this.



What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.



eg.



ALTER TABLE `YourSchema`.`YourTableName` 
ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);


Now running the following one time:



INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');


Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:




Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
'CompoundUniqueIndexName'




Caveat



I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.



The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.



INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');


Then again,



INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');





share|improve this answer






























    up vote
    -1
    down vote













    This type of condition may be more performance if you use it in queries.



    SELECT TOP 1 1 FROM Leads






    share|improve this answer





















    • mysql equivalent of top is limit.But I don't see how this would help.
      – P.Salmon
      Nov 8 at 18:33













    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














     

    draft saved


    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53213487%2fhow-insert-register-if-not-exist-trigger-mysql%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    Handling this in a trigger is not the best or most efficient place to handle this.



    What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.



    eg.



    ALTER TABLE `YourSchema`.`YourTableName` 
    ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);


    Now running the following one time:



    INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');


    Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:




    Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
    'CompoundUniqueIndexName'




    Caveat



    I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.



    The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.



    INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');


    Then again,



    INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');





    share|improve this answer



























      up vote
      0
      down vote













      Handling this in a trigger is not the best or most efficient place to handle this.



      What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.



      eg.



      ALTER TABLE `YourSchema`.`YourTableName` 
      ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);


      Now running the following one time:



      INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');


      Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:




      Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
      'CompoundUniqueIndexName'




      Caveat



      I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.



      The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.



      INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');


      Then again,



      INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');





      share|improve this answer

























        up vote
        0
        down vote










        up vote
        0
        down vote









        Handling this in a trigger is not the best or most efficient place to handle this.



        What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.



        eg.



        ALTER TABLE `YourSchema`.`YourTableName` 
        ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);


        Now running the following one time:



        INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');


        Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:




        Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
        'CompoundUniqueIndexName'




        Caveat



        I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.



        The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.



        INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');


        Then again,



        INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');





        share|improve this answer














        Handling this in a trigger is not the best or most efficient place to handle this.



        What you could do is build a compound unique index. Which would then in turn NOT allow you to insert a second row where the selected column values match identically to another row.



        eg.



        ALTER TABLE `YourSchema`.`YourTableName` 
        ADD UNIQUE INDEX `CompoundUniqueIndexName` (`Col1` ASC, `Col2` ASC, `Col3` ASC);


        Now running the following one time:



        INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`, `Col3`) VALUES ('Bob', 'Jim', 'Bill');


        Will successfully add a row. But you run it a second time, and you will get the following error and the row will not be insert:




        Error Code: 1062. Duplicate entry 'Bob-Jim-Bill' for key
        'CompoundUniqueIndexName'




        Caveat



        I have found Every value in your compound index needs to have a value. So it is important to set each column involved in your compound index to be NOT NULL. Additionally it may be in your interest to also supply a default value like '0' or something if you can not control the input to assure a value is present.



        The reason for this is I'm not entirely sure of, But I know the following two statements will NOT produce a 'Duplicate Entry' error, because Col3 will be NULL without the above precautions.



        INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');


        Then again,



        INSERT INTO `YourSchema`.`YourTableName` (`Col1`, `Col2`) VALUES ('Bob', 'Jim');






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 8 at 20:08

























        answered Nov 8 at 19:50









        DarbyM

        678416




        678416
























            up vote
            -1
            down vote













            This type of condition may be more performance if you use it in queries.



            SELECT TOP 1 1 FROM Leads






            share|improve this answer





















            • mysql equivalent of top is limit.But I don't see how this would help.
              – P.Salmon
              Nov 8 at 18:33

















            up vote
            -1
            down vote













            This type of condition may be more performance if you use it in queries.



            SELECT TOP 1 1 FROM Leads






            share|improve this answer





















            • mysql equivalent of top is limit.But I don't see how this would help.
              – P.Salmon
              Nov 8 at 18:33















            up vote
            -1
            down vote










            up vote
            -1
            down vote









            This type of condition may be more performance if you use it in queries.



            SELECT TOP 1 1 FROM Leads






            share|improve this answer












            This type of condition may be more performance if you use it in queries.



            SELECT TOP 1 1 FROM Leads







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 8 at 18:31









            umutcakar

            91




            91












            • mysql equivalent of top is limit.But I don't see how this would help.
              – P.Salmon
              Nov 8 at 18:33




















            • mysql equivalent of top is limit.But I don't see how this would help.
              – P.Salmon
              Nov 8 at 18:33


















            mysql equivalent of top is limit.But I don't see how this would help.
            – P.Salmon
            Nov 8 at 18:33






            mysql equivalent of top is limit.But I don't see how this would help.
            – P.Salmon
            Nov 8 at 18:33




















             

            draft saved


            draft discarded



















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53213487%2fhow-insert-register-if-not-exist-trigger-mysql%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            鏡平學校

            ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

            Why https connections are so slow when debugging (stepping over) in Java?