php - multiple - MySQL-ignorar error de inserción: entrada duplicada
php mysql insert $_post (7)
Estoy trabajando en PHP.
Por favor, ¿cuál es la forma correcta de insertar nuevos registros en el DB, que tiene un campo único? Estoy insertando muchos registros en un lote y solo quiero que se inserten los nuevos y no deseo ningún error para la entrada duplicada.
¿Hay alguna forma de hacer primero un SELECCIONAR y ver si la entrada ya está allí antes de INSERTAR e INSERTAR solo cuando SELECCIONAR no devuelve ningún registro? Espero que no.
Me gustaría decirle a MySQL que ignore estas inserciones sin ningún error.
Gracias
¿Cómo se ve el esquema de la base de datos?
Puede agregar una columna de ID que se incrementará automáticamente para cada inserción, para garantizar filas únicas.
Intente crear una tabla duplicada, preferiblemente una tabla temporal, sin la restricción única y haga su carga masiva en esa tabla. A continuación, seleccione solo los elementos únicos (DISTINCT) de la tabla temporal e insértelos en la tabla de destino.
Pregunta: estoy configurando una base de datos con clientes. Sé que utiliza la instrucción "insertar" para insertar información en la base de datos, pero ¿cómo me aseguro de no volver a ingresar la misma información del cliente?
Respuesta: Puede asegurarse de no insertar información duplicada utilizando la condición EXISTS.
Por ejemplo, si tuviera una tabla llamada clientes con una clave principal de client_id, podría usar la siguiente declaración:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, ''advertising''
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
Esta instrucción inserta múltiples registros con una subselección.
Si desea insertar un solo registro, puede usar la siguiente declaración:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, ''IBM'', ''advertising''
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
El uso de la tabla dual le permite ingresar sus valores en una declaración de selección, incluso si los valores no están almacenados actualmente en una tabla.
Puede usar la sintaxis INSERTAR ... IGNORAR si no desea realizar ninguna acción cuando hay un registro duplicado.
Puede usar la sintaxis REPLACE INTO si desea sobrescribir un registro anterior con uno nuevo con la misma clave.
O bien, puede usar la sintaxis INSERTAR ... EN ACTUALIZACIÓN DE LLAVE DUPLICADA si desea realizar una actualización del registro cuando encuentra un duplicado.
Editar: Pensé que agregaría algunos ejemplos.
Ejemplos
Digamos que tiene una tabla llamada tbl
con dos columnas, id
y value
. Hay una entrada, id = 1 y value = 1. Si ejecuta las siguientes declaraciones:
REPLACE INTO tbl VALUES(1,50);
Aún tiene un registro, con id = 1 valor = 50. Sin embargo, tenga en cuenta que todo el registro se BORRÓ primero y luego se volvió a insertar. Entonces:
INSERT IGNORE INTO tbl VALUES (1,10);
La operación se ejecuta con éxito, pero no se inserta nada. Aún tienes id = 1 y value = 50. Finalmente:
INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;
Ahora tiene un solo registro con id = 1 y value = 200.
Puedes usar triggers .
También consulte esta guía de introducción a los desencadenantes .
$duplicate_query=mysql_query("SELECT * FROM student") or die(mysql_error());
$duplicate=mysql_num_rows($duplicate_query);
if($duplicate==0)
{
while($value=mysql_fetch_array($duplicate_query)
{
if(($value[''name'']==$name)&& ($value[''email'']==$email)&& ($value[''mobile'']==$mobile)&& ($value[''resume'']==$resume))
{
echo $query="INSERT INTO student(name,email,mobile,resume)VALUES(''$name'',''$email'',''$mobile'',''$resume'')";
$res=mysql_query($query);
if($query)
{
echo "Success";
}
else
{
echo "Error";
}
else
{
echo "Duplicate Entry";
}
}
}
}
else
{
echo "Records Already Exixts";
}
INSERT INTO tbl (col1,col2) SELECT val1,val2 FROM tbl
WHERE (SELECT COUNT(*) FROM tbl WHERE col1 = val1 AND col2 = val2) = 0
LIMIT 1,1