Varios métodos para evitar que Mysql inserte datos duplicados

inserte la descripción de la imagen aquí

1. Introducción

Cuando opera la base de datos en tiempos normales, a veces necesita insertar algunos datos en la base de datos. En este momento, necesita usar la declaración de inserción de la base de datos, pero al insertar datos en la base de datos, no puede insertar a ciegas, porque la inserción a ciegas puede causar la duplicación de datos, una pérdida de recursos de la base de datos, por lo que, en general, habrá una llamada clave principal en la base de datos, lo que requiere que el campo o combinación de clave principal seleccionada no se pueda repetir, esto puede evitar la generación de algunos datos sucios, pero al mismo tiempo trae algunas operaciones hostiles, por ejemplo, al insertar un dato, el valor del campo de clave principal ya existe. En este momento, si usa directamente la instrucción insertar en para insertar, se producirá un error informó, indicando que el valor del campo ya existe, pero a veces no queremos verlo Error de declaración, por lo que esto trae una mala experiencia operativa, para evitar este tipo de error, la mejor manera esEvite claves primarias duplicadas al insertar. Si es inevitable. El uso de las siguientes gramáticas también puede lograr el efecto de no informar errores.

gramática Comentarios (la clave principal existe)
insertar ignorar en Si la base de datos ya existe, esta operación no se realizará. Si no existe en la base de datos, inserte estos datos en la base de datos.
insertar en no existe Si la base de datos ya existe, esta operación no se realizará. Si no existe en la base de datos, inserte estos datos en la base de datos.
insertar en la actualización de clave duplicada Si la base de datos ya existe, primerorenovary realice esta acción. Si no existe en la base de datos, inserte estos datos en la base de datos.
reemplazar en Si ya existe en la base de datos, directamenteborrary realice esta acción. Si no existe en la base de datos, inserte estos datos en la base de datos.

2. Caso

base de datos de prueba

-- 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,insertar ignorar en

explicar:

​ Hay una clave primaria, si los datos insertadosvalor de la clave principalSi la base de datos ya existe, esta operación no se realizará. Si no existe en la base de datos, inserte estos datos en la base de datos.

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

inserte la descripción de la imagen aquí

Se puede ver que la inserción no es exitosa en este momento, porque el valor de la clave principal ya existe, y la operación de inserción se ignora, pero no se informa ningún error, lo que mejora la facilidad de uso. Si sigue la operación habitual, definitivamente informar de un error.

informar error

inserte la descripción de la imagen aquí

2.2,insertar en no existe

explicar:

Hay una clave principal, si los datos insertadosvalor de la clave principalSi la base de datos ya existe, esta operación no se realizará. Si no existe en la base de datos, inserte estos datos en la base de datos.

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

inserte la descripción de la imagen aquí

Se puede ver que la inserción no es exitosa en este momento, porque el valor de la clave principal ya existe, la operación de inserción se ignora, pero no se informa ningún error, lo que mejora la facilidad de uso.

2.3,insertar en la actualización de clave duplicada

explicar:

Hay una clave principal, si los datos insertadosvalor de la clave principalSi la base de datos ya existe, primerorenovary realice esta acción. Si no existe en la base de datos, los datos se insertarán en la base de datos esta vez y esta operación es similar a una declaración de actualización.

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

inserte la descripción de la imagen aquí

Si el valor de la clave principal no existe en la base de datos, se insertará directamente y la declaración de actualización fallará.

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

inserte la descripción de la imagen aquí

2.4,reemplazar en

Hay una clave principal, si los datos insertadosvalor de la clave principalSi la base de datos ya existe, primeroborrary realice esta acción. Si no existe en la base de datos, los datos se insertarán en la base de datos esta vez y esta operación es similar a una declaración de actualización.

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

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Si el valor de la clave principal no existe en la base de datos, se insertará directamente y la declaración de eliminación fallará.

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

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3. Resumen

Aunque el método anterior puede evitar la inserción y el informe de errores cuando se repite el valor de la clave principal, a veces necesitamos ver la información de informe de errores correspondiente, que es más propicia para la depuración, por lo que cómo usarlo y cuándo usarlo depende de la situación. .
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_40520912/article/details/128622896
Recomendado
Clasificación