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');
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
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);
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语句后的值进行入库操作。
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';
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');
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';
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. .