MySQL Insert Ignora la duplicada de la clau

Mysql Insert Ignore Duplicate Key



Sovint hi ha dades conflictives en taules o conjunts de resultats. Corregir també consumeix molt de temps i sovint cal evitar registres repetits. Cal identificar els registres duplicats i eliminar-los de qualsevol taula. En aquesta secció s’explicarà com evitar que apareguin dades duplicades dins d’una taula i com eliminar els registres duplicats actuals. En aquesta guia, aprendreu a utilitzar la clàusula INSERT IGNORE per evitar l’error.

Sintaxi:

Aquí teniu la sintaxi de la consulta INSERT IGNORE.







>>INSERTI IGNORE INTO table_name(col1, col2, col3)VALORS(llista_valors),(llista_valors),(llista_valors);

INSERTI IGNORE via Workbench:

Obriu el MySQL Workbench 8.0 des del vostre sistema i connecteu-lo a la instància de la base de dades.





A l'àrea d'ordres, heu de crear una taula Employee amb quatre columnes on una d'elles s'ha d'especificar com a ÚNICA. Proveu la consulta següent a l'àrea de consulta del navegador per crear aquesta taula. Seleccioneu tota la consulta i feu clic al signe flash per executar-la.





>>CREA TAULA Empleat(ID int CLAU PRIMÀRIA NO NULA, nom varchar(50)NO NUL, Age Varchar(50), Salari varchar(50), ÚNIC(Identificació));

En crear-lo, podeu trobar l’empleat de la taula a la llista, a l’opció de Taules, a sota de les dades de la base de dades.



A la visualització de quadrícula, podeu introduir els registres sense escriure cap consulta. Per tant, obriu la vista de quadrícula de l’empleat de la taula i afegiu-hi alguns registres tal com es mostra a continuació. Hem introduït tots els registres únics sense duplicats. Feu clic al botó 'Aplica' per aplicar els canvis.

S'obrirà una finestra nova amb les consultes rellevants relacionades amb els registres que hem introduït anteriorment. Aquesta pantalla es pot anomenar pantalla de revisió. Si voleu canviar alguna cosa, podeu fer-ho aquí. En cas contrari, premeu el botó Aplica per executar les consultes.

Com podeu veure, la consulta s'ha executat amb èxit i els registres es desen a la base de dades i a la seva taula Employee. Hauria generat un error si haguéssim afegit algun valor duplicat a l'identificador de columna. Toqueu el botó Finalitza.

Tot es tractava de la visualització de quadrícula. Ara, inserirem registres a través de l’àrea de consulta. Mentrestant, aquesta vegada hem estat inserint registres duplicats per comprovar la sortida. Per tant, hem provat la següent consulta INSERT, on tenim dues llistes de valors. Les dues llistes de valors tenen el mateix valor a la columna 'ID'. Seleccioneu la consulta i premeu el signe flash per executar la consulta.

La consulta no funcionarà correctament i generarà un error a causa dels valors duplicats a l'ordre INSERT tal com es mostra a la imatge.

Ara proveu la mateixa consulta anterior amb la clàusula INSERT IGNORE i executeu-la tal com es va presentar.

Podeu veure que no genera cap error a l’àrea de sortida, però avisa que l’ordre conté valors duplicats.

Actualitzeu la vista de quadrícula de la taula Empleat. La consulta INSERT IGNORE ha funcionat a la meitat. S'ha inserit la primera llista de valors a la taula, però s'ha ignorat la segona llista de valors a causa del valor repetit 13.

INSERIR IGNORE mitjançant el Shell de línia d'ordres:

Per entendre aquest concepte, obrim l’intèrpret d’ordres del client de línia de comandes MySQL al vostre sistema. Quan ho demaneu, escriviu la contrasenya MySQL per començar a treballar-hi.

Ara és hora de crear una taula. Proveu l'ordre següent per fer-ho. Hem creat una taula anomenada 'ministre', mentre que una de les seves columnes té una restricció ÚNICA. És clar que l’identificador de columna només acceptarà els valors únics i no els valors duplicats.

>>CREA TABLE data.minister(Mitjà INT PRIMÀRIA CLAU ÚNICA NO NULA, nom VARCHAR(45), Ciutat VARCHAR(45));

La consulta funciona correctament i s'ha creat la taula. Per entendre la clàusula INSERT IGNORE, primer heu de veure com funciona la senzilla ordre INSERT. Si utilitzeu l’ordre INSERT per inserir diverses dades d’informació en una taula, MySQL suspèn la transacció i genera una excepció si es produeix un error durant tot el processament. Com a conseqüència, a la taula no hi ha cap fila afegida. Inserim el primer registre a la taula ministre mitjançant la consulta que es mostra a continuació. La consulta funcionarà correctament perquè actualment la taula està en blanc i no hi ha cap registre amb què contrapartir.

Com que l’identificador de columna és ÚNIC, quan provem la instrucció següent a l’intèrpret d’ordres de la línia d’ordres, es generarà un error. Això es deu al fet que hem afegit el valor 11 a la consulta anterior i, a causa de la clau ÚNICA, no ens permet tornar a afegir el valor repetit.

Per tant, en comprovar la taula, podem veure que la taula només té un registre afegit per la primera consulta INSERT.

>>SELECCIONA*FROM data.minister;

Per contra, si utilitzeu la clàusula INSERT IGNORE, les files de dades incorrectes que activen l'error passaran per alt i només s'introduiran les exactes. A l'ordre següent, hem utilitzat l'ordre INSERT IGNORE per evitar afegir valors repetits a la taula i passar per alt l'error. Com podeu veure, la primera llista de valors té un valor duplicat 11 igual que a la consulta anterior. Tot i que la segona llista de valors és única, es mostrarà 1 registre inserit a la taula, que és la segona llista de valors. MySQL també indica que només s'ha inserit 1 registre i que es genera 1 advertiment al missatge. Aleshores podeu suposar que si fem servir la clàusula INSERT IGNORE, MySQL us proporcionarà una advertència.

Com podeu veure a la sortida següent, només tenim dos registres en aquesta taula: la primera llista de valors proporcionada a la consulta anterior, que no passa per alt.

>>SELECCIONA*FROM data.minister;

Conclusió:

Hem fet tots els exemples necessaris d’INSERTAR IGNORAR sobre valors duplicats mitjançant MySQL Workbench i el shell de client de línia de comandes MySQL.