Comment insérer une ligne si elle n'existe pas dans MySQL
-
Utilisez
REPLACE
pour insérer si elle n’existe pas dans MySQL -
Utilisez
INSERT IGNORE
pour insérer si elle n’existe pas dans MySQL -
Utilisez
INSERT ... ON DUPLICATE KEY UPDATE
pour insérer si elle n’existe pas dans MySQL
Ce tutoriel vous montre comment insérer une ligne dans une table si elle n’existe pas encore dans mySQL.
Il y a trois façons simples d’accomplir ce problème, en utilisant REPLACE
, INSERT IGNORE
, ou INSERT ... ON DUPLICATE KEY UPDATE
.
Tout d’abord, imaginons que nous ayons une table person
structurée comme telle :
CREATE TABLE person (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT NOT NULL,
address VARCHAR(128)
);
Avec les enregistrements existants suivants :
id | name | age | address |
---|---|---|---|
1 | John Doe | 27 | New York, New York |
2 | Jane Doe | 26 | Berlin, Germany |
3 | Chun Li | 24 | Beijing, China |
4 | Thor Odinson | 40 | Asgard |
Passons maintenant aux solutions réelles.
Utilisez REPLACE
pour insérer si elle n’existe pas dans MySQL
Ce que fait REPLACE
est qu’il écrase les enregistrements existants lorsqu’il est trouvé ; s’il n’existe pas encore, il insère une nouvelle ligne. C’est essentiellement comme la mise à jour, mais avec la possibilité d’insérer.
Fournissons un exemple de requête pour exécuter REPLACE
dans John Doe.
REPLACE INTO 'person'
SET id = 1,
name = 'John Doe'`,
age = 28,
address = 'Los Angeles, California'
Si John Doe existe, il sera écrasé avec les nouvelles données ; s’il n’existe pas, cela créera une nouvelle entrée pour John Doe.
Cependant, cette méthode n’est pas efficace pour l’insertion car elle écrase les enregistrements existants au lieu de simplement les sauter s’ils sont trouvés. Même si elle permet de faire le travail, ce n’est pas la meilleure façon de le faire.
Le nouveau résultat de la recherche en sélectionnant John Doe sera le même :
id | name | age | address |
---|---|---|---|
1 | John Doe | 28 | Los Angeles, California |
L’âge et l’adresse de John Doe ont été modifiés ou mis à jour par le script REPLACE
.
Utilisez INSERT IGNORE
pour insérer si elle n’existe pas dans MySQL
Nous utiliserons pour cela également les mêmes données non éditées que celles du tableau ci-dessus.
Sur INSERER IGNORE
, si la clé primaire de l’enregistrement est déjà présente dans le DataFrame, elle sera discrètement ignorée ou ignorée.
Si nous enlevons le mot-clé IGNORE
, l’insertion d’un enregistrement avec un identifiant ou une clé primaire existante annulera la requête et affichera un message d’erreur indiquant que l’enregistrement avec la clé primaire existe déjà.
Après le mot-clé INSERT
, le mot-clé IGNORE
est un substitut à l’avortement à cause de l’erreur, et au lieu de cela, il continue la requête sans insérer un nouvel enregistrement.
INSERT IGNORE person
SET 'id' = 4,
age = 1000,
address = 'Chicago'
D’après le tableau que nous avons déclaré ci-dessus, un enregistrement avec un id
ou une clé primaire 4
existe déjà (Thor Odinson). Par conséquent, cette requête est ignorée par le script et ne permet donc pas de mettre à jour ou d’insérer un enregistrement dans le DataFrame.
Le résultat si nous interrogeons Thor en person
serait :
id | name | age | address |
---|---|---|---|
4 | Thor Odinson | 40 | Asgard |
L’âge et l’adresse dans la requête n’ont pas du tout affecté la ligne avec id
4.
Utilisez INSERT ... ON DUPLICATE KEY UPDATE
pour insérer si elle n’existe pas dans MySQL
Si vous utilisez la clause ON DUPLICATE KEY UPDATE
et que la ligne que vous voulez insérer est un double dans un index ou une clé primaire UNIQUE
, la ligne exécutera une UPDATE
.
Ceci fait essentiellement la même chose que le REPLACE
.
Supposons que nous voulions insérer un enregistrement avec id
2
INSERT INTO person (id, name, age, address)
VALUES (1, 'Jane Deer', '33', 'Tallahassee Florida')
ON DUPLICATE KEY UPDATE id = id+1;
L’id
est incrémenté pour générer un nouvel enregistrement au lieu de mettre à jour l’enregistrement existant.
Si nous interrogeons toutes les lignes de person
, le résultat sera le suivant :
id | name | age | address |
---|---|---|---|
1 | John Doe | 27 | New York, New York |
2 | Jane Doe | 26 | Berlin, Germany |
3 | Chun Li | 24 | Beijing, China |
4 | Thor Odinson | 40 | Asgard |
5 | Jane Deer | 33 | Tallahasee, Florida |
Jane Deer, au lieu de remplacer Jane Doe, est ajouté comme nouvel enregistrement dans la table.
La façon la plus efficace de procéder à l’insertion et à la vérification de son existence est sans aucun doute d’utiliser INSERT IGNORE
.
Cependant, les deux autres mots-clés sont également utilisables au cas par cas, si jamais vous voulez mettre à jour si une ligne que vous voulez insérer existe, utilisez REPLACE
. Si vous ne voulez pas que la ligne soit modifiée mais que vous voulez vraiment insérer le nouvel enregistrement, utilisez INSERT ... ON DUPLICATE KEY UPDATE
.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn