sql >> Database teknologi >  >> RDS >> Mysql

Sådan undgår du at indsætte duplikerede poster i MySQL

Nogle gange skal du muligvis forhindre duplikatindsættelse, mens du tilføjer rækker til MySQL-tabellen. Du kan nemt gøre dette ved at bruge INSERT IGNORE statement. I denne artikel vil vi se på, hvordan man undgår at indsætte duplikerede poster i MySQL.


Sådan undgår du at indsætte duplikerede poster i MySQL

Her er trinene til at undgå at indsætte duplikerede poster i MySQL. Der er to dele at huske på. Først skal du oprette et UNIKT kolonneindeks til din tabel. Dernæst skal du indsætte data ved at bruge INSERT IGNORE for at undgå duplikerede poster.

Lad os sige, at du har følgende tabel salg(id, ordre_dato, beløb)

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


1. Opret unikt indeks

Vi tilføjer et UNIKT indeks for id kolonne ved hjælp af ALTER TABLE-sætning.

Her er syntaksen til at oprette UNIKT indeks i MySQL.

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

Her er SQL-forespørgslen for at tilføje UNIKT indeks til id kolonne i salg tabel.

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


2. Indsæt data ved hjælp af INSERT IGNORE

Dernæst vil vi indsætte data ved hjælp af INSERT IGNORE.

Inden vi fortsætter, lad os se på, hvad der er INSERT IGNORE i MySQL, og hvordan INSERT IGNORE virker.


Hvad er INSERT IGNORE?

INSERT IGNORE er en kommando, der tvinger MySQL til at ignorere fejl, når du indsætter data i en MySQL-tabel.


Hvordan virker INSERT IGNORE?

I vores tilfælde har vi allerede oprettet et UNIKT indeks for id kolonne. Hvis vi bruger INSERT-sætningen til at tilføje data med duplikerede rækker, vil MySQL give en fejl og stoppe udførelse af forespørgsler efter den første duplikerede række.

I stedet, når vi bruger INSERT IGNORE, vil MySQL lydløst kassere indsættelsen af ​​en dublet række uden at generere en fejl og fortsætte udførelse af forespørgsler.

Så hvis en post ikke indeholder duplikerede data, vil MySQL indsætte den som normalt. Hvis det er en dublet post, så vil MySQL simpelthen ignorere den.

Her er SQL-forespørgslen til at indsætte data uden dubletter i salg tabel.

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, undgår MySQL at indsætte duplikerede rækker uden at generere nogen fejl.

Har du brug for et rapporteringsværktøj til MySQL? Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. Fjernelse af sporfiler med ADRCI

  2. Top måder at øge databaseeffektiviteten

  3. Failover &Failback på Amazon RDS

  4. Hvordan fjerner du dubletter fra mellemrumssepareret liste af Oracle regexp_replace?