sql >> Databasteknik >  >> RDS >> Mysql

Hur man undviker att infoga dubbletter av poster i MySQL

Ibland kan du behöva förhindra duplicerad infogning när du lägger till rader i MySQL-tabellen. Du kan enkelt göra detta med INSERT IGNORE-satsen. I den här artikeln kommer vi att titta på hur du undviker att infoga dubbletter av poster i MySQL.


Hur man undviker att infoga dubbletter av poster i MySQL

Här är stegen för att undvika att infoga dubbletter av poster i MySQL. Det finns två delar att tänka på. Först måste du skapa ett UNIKT kolumnindex för din tabell. Därefter måste du infoga data med INSERT IGNORE för att undvika dubbletter av poster.

Låt oss säga att du har följande tabell försäljning(id, order_date, summa)

mysql> create table sales(
          id int, 
          order_date date, 
          amount int
          );


1. Skapa unikt index

Vi lägger till ett UNIKT index för id kolumn med ALTER TABLE-satsen.

Här är syntaxen för att skapa UNIKT index i MySQL.

alter table table_name ADD UNIQUE INDEX(
        column_name1, 
        column_name2,
        ...
        column_nameN
        );

Här är SQL-frågan för att lägga till UNIKT index till id kolumnen i försäljning bord.

mysql> alter table sales ADD UNIQUE INDEX(id);


2. Infoga data med INSERT IGNORE

Därefter kommer vi att infoga data med INSERT IGNORE.

Innan vi fortsätter, låt oss titta på vad som är INSERT IGNORE i MySQL och hur fungerar INSERT IGNORE.


Vad är INSERT IGNORE?

INSERT IGNORE är ett kommando som tvingar MySQL att ignorera fel när du infogar data i en MySQL-tabell.


Hur fungerar INSERT IGNORE?

I vårt fall har vi redan skapat ett UNIKT index för id kolumn. Om vi ​​använder INSERT-satsen för att lägga till data med dubbletter av rader, kommer MySQL att skicka ett felmeddelande och stoppa exekveringen av en fråga efter den första dubblettraden.

Istället, när vi använder INSERT IGNORE, kommer MySQL tyst att ignorera infogningen av en dubblettrad utan att generera ett fel och fortsätta körningen av frågan.

Så om en post inte innehåller dubbletter av data kommer MySQL att infoga den som vanligt. Om det är en dubblettpost kommer MySQL helt enkelt att ignorera den.

Här är SQL-frågan för att infoga data utan dubbletter i försäljning bord.

mysql> mysql> insert ignore into sales(id,order_date,amount)
     values(1, '2021-01-01', 250),
     (1, '2021-01-01', 250),
     (2, '2021-01-02', 200),
     (3, '2021-01-03', 150),
     (2, '2021-01-02', 200);
Query OK, 3 rows affected (0.10 sec)
Records: 5  Duplicates: 2  Warnings: 0

mysql> select * from sales;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2021-01-01 |    250 |
|    2 | 2021-01-02 |    200 |
|    3 | 2021-01-03 |    150 |
+------+------------+--------+

Som du kan se undviker MySQL att infoga dubbletter av rader utan att generera något fel.

Behöver du ett rapporteringsverktyg för MySQL? Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. söker programmässigt efter öppen anslutning i JDBC

  2. Specialtecken i MySQL-tabellnamn

  3. Autogenererar svarsfil

  4. JDBC ResultSet:Jag behöver en getDateTime, men det finns bara getDate och getTimeStamp