Pregunta

Estoy trabajando en PHP.

Por favor, cuál es la forma correcta de insertar nuevos registros en la base de datos, que tiene un campo único. Estoy insertando muchos registros en un lote y solo quiero que se inserten los nuevos y no quiero ningún error para la entrada duplicada.

¿Hay una única forma de hacer primero un SELECT y ver si la entrada ya está allí antes de INSERT - y solo INSERT cuando SELECT no devuelve ningún registro? Espero que no.

Me gustaría decirle a MySQL que ignore estas inserciones sin ningún error.

Gracias

¿Fue útil?

Solución

Puede utilizar la sintaxis INSERT ... IGNORE INSERT ... IGNORE no desea realizar ninguna acción cuando hay un registro duplicado.

Puede usar la sintaxis de REEMPLAZAR REPLACE INTO si desea sobrescribir un registro antiguo con uno nuevo con la misma clave.

O, puede usar INSERT ... ON Sintaxis de la ACTUALIZACIÓN DE TECLAS DUPLICADAS si desea realizar una actualización del registro cuando se encuentra con un duplicado.

Editar: pensé que añadiría algunos ejemplos.

Ejemplos

Supongamos que tiene una tabla llamada tbl con dos columnas, id y value . Hay una entrada, id = 1 y valor = 1. Si ejecuta las siguientes declaraciones:

REPLACE INTO tbl VALUES(1,50);

Todavía tiene un registro, con id = 1 valor = 50. Sin embargo, tenga en cuenta que todo el registro se ELIMINÓ primero y luego se reinsertó. Entonces:

INSERT IGNORE INTO tbl VALUES (1,10);

La operación se ejecuta con éxito, pero no se inserta nada. Todavía tienes id = 1 y valor = 50. Finalmente:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

Ahora tiene un solo registro con id = 1 y valor = 200.

Otros consejos

¿Qué aspecto tiene el esquema de la base de datos?

Puede agregar una columna de ID que auto incrementar para cada inserción, para garantizar filas únicas.

Pregunta: Estoy configurando una base de datos con clientes. Sé que usas el " insertar " Declaración 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 declaración inserta varios 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, aunque los valores no están actualmente almacenados en una tabla.

de http://www.techonthenet.com/sql/insert.php

Intente crear una tabla duplicada, preferiblemente una tabla temporal, sin la restricción única y haga su carga masiva en esa tabla. Luego, seleccione solo los elementos únicos (DISTINCT) de la tabla temporal e insértelos en la tabla de destino.

$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";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top