Comment empêcher les enregistrements en double de ma table Insérer ignore ne fonctionne pas ici
mysql> select * from emp;
+-----+---------+------+------+------+
| eno | ename | dno | mgr | sal |
+-----+---------+------+------+------+
| 1 | rama | 1 | NULL | 2000 |
| 2 | kri | 1 | 1 | 3000 |
| 4 | kri | 1 | 2 | 3000 |
| 5 | bu | 1 | 2 | 2000 |
| 6 | bu | 1 | 1 | 2500 |
| 7 | raa | 2 | NULL | 2500 |
| 8 | rrr | 2 | 7 | 2500 |
| 9 | sita | 2 | 7 | 1500 |
| 10 | dlksdgj | 2 | 2 | 2000 |
| 11 | dlksdgj | 2 | 2 | 2000 |
| 12 | dlksdgj | 2 | 2 | 2000 |
| 13 | dlksdgj | 2 | 2 | 2000 |
| 14 | dlksdgj | 2 | 2 | 2000 |
+-----+---------+------+------+------+
Voici ma table. Je veux éliminer ou empêcher insertion des enregistrements en double, comme le eno
champ est auto increment
totale de la ligne de ne jamais être en double, mais les enregistrements sont des doublons. How can I prevent inserting those duplicate records
j'ai essayé d'utiliser INSERT IGNORE AND ON DUPLICATE KEY UPDATE
(je pense que je ne les ai pas utilisé correctement).
La façon dont je les ai utilisés est,
mysql> insert into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000);
Query OK, 1 row affected (0.03 sec)
mysql> insert ignore into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000);
Query OK, 1 row affected (0.03 sec)
mysql> insert into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000) ON DUPLICATE KEY UPDATE eno=eno;
Query OK, 1 row affected (0.03 sec)
mysql> insert into emp(ename,dno,mgr,sal) values('dlksdgj',2,2,2000) ON DUPLICATE KEY UPDATE eno=eno;
Query OK, 1 row affected (0.04 sec
mysql> desc emp;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| eno | int(11) | NO | PRI | NULL | auto_increment |
| ename | varchar(50) | YES | | NULL | |
| dno | int(11) | YES | | NULL | |
| mgr | int(11) | YES | MUL | NULL | |
| sal | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
quelqu'un peut-il me donner une solution sur ce sujet?
Grâce.
source d'informationauteur Chella
Vous devez vous connecter pour publier un commentaire.
modifier la table en ajoutant
UNIQUE
contraintemais vous pouvez le faire si la table
employee
est vide.ou si les enregistrements existé, essayez d'ajouter
IGNORE
Mise à JOUR de 1
Quelque chose allait mal, je suppose. Vous devez seulement ajouter de la contrainte unique sur la colonne
ename
depuiseno
sera toujours unique en raison deAUTO_INCREMENT
.Afin d'ajouter de la contrainte unique, vous devez effectuer un nettoyage de votre table.
Les requêtes ci-dessous pour supprimer certains enregistrements en double, et modifie le tableau en ajoutant la contrainte unique sur la colonne
ename
.Voici une démonstration complète
Créer un
UNIQUE CONSTRAINT
sur lequel vous pensez que le duplicacy existent .comme
Ce fonctionne peu importe si vous nettoyez votre table (c'est à dire que vous pouvez arrêter l'insertion de doublons immédiatement et nettoyer sur liste séparée) et sans avoir à ajouter des contraintes uniques ou de modifier le tableau d'une autre manière:
La requête ci-dessus suppose que vous voulez utiliser
ename
comme un "unique", mais de la même manière, vous pouvez définir tous les autres champs ou de leurs combinaisons uniques pour les fins de la présenteINSERT
.Il fonctionne parce qu'il est un
INSERT ... SELECT
format où leSELECT
partie seulement produit une ligne (c'est à dire quelque chose à insérer) si sa gauche rejointemp
n'a pas déjà cette valeur. Naturellement, si vous vouliez changer de champ(s) défini cette "unicité", vous devez modifier leSELECT
et laLEFT JOIN
en conséquence.