Plusieurs méthodes pour empêcher MySQL d'insérer des données en double

insérez la description de l'image ici

1. Introduction

Lors de l'utilisation de la base de données à des moments ordinaires, vous devez parfois insérer des données dans la base de données. À ce stade, vous devez utiliser l'instruction d'insertion de la base de données, mais lors de l'insertion de données dans la base de données, vous ne pouvez pas insérer à l'aveugle, car l'insertion aveugle peut entraîner une duplication de données, un gaspillage des ressources de la base de données, donc en général il y aura une clé dite primaire dans la base de données, nécessitant que le champ ou la combinaison de clé primaire sélectionnée ne puisse pas être répétée, cela peut éviter la génération de certaines données sales, mais en même temps, cela entraîne des opérations peu conviviales, par exemple, lors de l'insertion d'un élément de données, la valeur du champ de clé primaire existe déjà. À ce stade, si vous utilisez directement l'instruction insert into pour insérer, une erreur sera signalé, indiquant que la valeur du champ existe déjà, mais parfois nous ne voulons pas la voir Erreur de déclaration, donc cela apporte une mauvaise expérience de fonctionnement, afin d'éviter ce genre d'erreur, la meilleure façon est deÉviter les clés primaires en double lors de l'insertion. Si c'est inévitable. L'utilisation des grammaires suivantes peut également avoir pour effet de ne pas signaler les erreurs.

grammaire Remarques (la clé primaire existe)
insérer ignorer dans Si la base de données existe déjà, cette opération ne sera pas effectuée. S'il n'existe pas dans la base de données, insérez ces données dans la base de données.
insérer dans n'existe pas Si la base de données existe déjà, cette opération ne sera pas effectuée. S'il n'existe pas dans la base de données, insérez ces données dans la base de données.
insérer dans la mise à jour de la clé en double Si la base de données existe déjà, commencez parrenouveler, et effectuez cette action. S'il n'existe pas dans la base de données, insérez ces données dans la base de données.
remplacer dans S'il existe déjà dans la base de données, directementsupprimer, et effectuez cette action. S'il n'existe pas dans la base de données, insérez ces données dans la base de données.

2. Cas

base de données d'essai

-- auto-generated definition
create table if not exists  t_admin
(
    id        int auto_increment
        primary key,
    adminName varchar(50) null,
    passWord  varchar(50) null
);
INSERT INTO t_admin (id, adminName, passWord) VALUES (1, 'admin', 'admin');
INSERT INTO t_admin (id, adminName, passWord) VALUES (2, 'xiaoqian', '123456');

2.1 、insérer ignorer dans

expliquer:

​ Il y a une clé primaire, si les données inséréesvaleur de la clé primaireSi la base de données existe déjà, cette opération ne sera pas effectuée. S'il n'existe pas dans la base de données, insérez ces données dans la base de données.

insert ignore into t_admin value (2,'itbestboy','123456');

insérez la description de l'image ici

On peut voir que l'insertion ne réussit pas pour le moment, car la valeur de la clé primaire existe déjà et l'opération d'insertion est ignorée, mais aucune erreur n'est signalée, ce qui améliore la convivialité. Si vous suivez l'opération habituelle, vous allez certainement signaler une erreur.

signaler une erreur

insérez la description de l'image ici

2.2、insérer dans n'existe pas

expliquer:

Il existe une clé primaire, si les données inséréesvaleur de la clé primaireSi la base de données existe déjà, cette opération ne sera pas effectuée. S'il n'existe pas dans la base de données, insérez ces données dans la base de données.

insert into t_admin select 2,'itbestboy','123456' from t_admin where not exists(select id from t_admin where id=2);

insérez la description de l'image ici

On peut voir que l'insertion ne réussit pas à ce moment, car la valeur de la clé primaire existe déjà, l'opération d'insertion est ignorée, mais aucune erreur n'est signalée, ce qui améliore la convivialité.

2.3、insérer dans la mise à jour de la clé en double

expliquer:

Il existe une clé primaire, si les données inséréesvaleur de la clé primaireSi la base de données existe déjà, commencez parrenouveler, et effectuez cette action. S'il n'existe pas dans la base de données, les données seront insérées dans la base de données cette fois, et cette opération est similaire à une instruction de mise à jour.

-- 主键值在数据库中已经存在,此时会先执行update 语句,然后在插入,
insert  into t_admin value (2,'itbestboy','123456') on duplicate key update adminName='itbestboy', passWord='123456';
-- 注;当update语句后跟的值与value中的值不一致时,会按着update语句后的值进行入库操作。

insérez la description de l'image ici

Si la valeur de la clé primaire n'existe pas dans la base de données, elle sera insérée directement et l'instruction de mise à jour échouera

 insert  into t_admin value (3,'itbestboy','123456') on duplicate key update adminName='tboy', passWord='1456';

insérez la description de l'image ici

2.4、remplacer dans

Il existe une clé primaire, si les données inséréesvaleur de la clé primaireSi la base de données existe déjà, commencez parsupprimer, et effectuez cette action. S'il n'existe pas dans la base de données, les données seront insérées dans la base de données cette fois, et cette opération est similaire à une instruction de mise à jour.

-- 主键值在数据库中已经存在,此时会先删除这条记录,然后重新插入数据库中
replace into t_admin (id, adminName, passWord) VALUES (3, 'boy', '123456');

insérez la description de l'image ici
insérez la description de l'image ici

Si la valeur de la clé primaire n'existe pas dans la base de données, elle sera insérée directement et l'instruction de suppression échouera

 insert  into t_admin value (3,'itbestboy','123456') on duplicate key update adminName='tboy', passWord='1456';

insérez la description de l'image ici
insérez la description de l'image ici

3. Résumé

Bien que la méthode ci-dessus puisse éviter d'insérer et de signaler des erreurs lorsque la valeur de clé primaire est répétée, nous avons parfois besoin de voir les informations de rapport d'erreur correspondantes, ce qui est plus propice au débogage, donc comment l'utiliser et quand l'utiliser dépend de la situation .
insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_40520912/article/details/128622896
conseillé
Classement