Pergunta

Eu estou trabalhando em PHP.

Por favor, qual é a maneira correta de inserir novos registros na base de dados, que tem campo único. Eu estou inserindo monte de registros em um lote e eu só quero os novos para ser inserido e eu não quero qualquer erro para a entrada duplicada.

Existe única maneira de primeiro fazer um SELECT e ver se a entrada já está lá antes do INSERT - e para inserir somente quando SELECT retorna nenhum registro? Espero que não.

Gostaria de alguma forma dizer ao MySQL para ignorar essas inserções sem qualquer erro.

Obrigado

Foi útil?

Solução

Você pode usar INSERT ... IGNORE sintaxe se você quer tomar nenhuma ação quando há um registro duplicado.

Você pode usar SUBSTITUIR sintaxe INTO se você quiser sobrescrever um registro antigo por um novo com a mesma chave.

Ou, você pode usar INSERT ... ON DUPLICATE KEY aTUALIZAÇÃO sintaxe se você deseja executar uma atualização para o registro em vez quando você encontrar uma duplicata.

Edit:. Pensei em adicionar alguns exemplos

Exemplos

Digamos que você tenha uma tabela chamada tbl com duas colunas, id e value. Há uma entrada, id = 1 e o valor = 1. Se você execute as seguintes instruções:

REPLACE INTO tbl VALUES(1,50);

Você ainda tem um registro, com id = 1 valor = 50. Note-se que todo o registro foi excluído primeiro no entanto, e em seguida, re-inserido. Então:

INSERT IGNORE INTO tbl VALUES (1,10);

A operação é executada com sucesso, mas nada está inserido. Você ainda tem id = 1 e valor = 50. Finalmente:

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

Agora você tem um único registro com o id = 1 e valor = 200.

Outras dicas

Você pode usar gatilhos .

Além disso, verifique este guia introdução à gatilhos .

Como é o esquema de banco de dados como?

Você pode adicionar uma coluna de identificação que será auto incrementar para cada inserção, para garantir linhas exclusivas.

Pergunta: Estou configurando um banco de dados com os clientes. Eu sei que você usar a instrução "Inserir" para inserir informações no banco de dados, mas como posso ter certeza de que eu não introduzir a mesma informação cliente novamente?

Resposta:. Você pode ter certeza que você não insira informações duplicadas usando a condição existe

Por exemplo, se você tivesse uma tabela chamada clientes com uma chave primária de client_id, você poderia usar a seguinte declaração:

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 declaração inserções vários registros com um subselect.

Se você quiser inserir um único registro, você poderia usar a seguinte declaração:

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);

O uso da tabela dupla permite que você insira seus valores em uma instrução SELECT, mesmo que os valores não estão actualmente armazenadas em uma tabela.

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

Tente criar uma tabela duplicado, de preferência uma tabela temporária, sem a restrição exclusiva e fazer o seu carregamento em massa para essa tabela. Em seguida, selecione apenas os itens únicos (distintos) da tabela temporária e inserir na tabela 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top