MySQL-игнорировать ошибку вставки: дублировать запись


Я работаю в PHP.

пожалуйста, как правильно вставлять новые записи в БД, которая имеет уникальное поле. Я вставляю много записей в пакет, и я просто хочу, чтобы новые были вставлены, и я не хочу никаких ошибок для повторяющейся записи.

есть ли только способ сначала сделать выбор и посмотреть, есть ли запись уже перед вставкой - и вставлять только тогда, когда SELECT не возвращает записей? Надеюсь, что нет.

Я хотел бы как-то скажите MySQL игнорировать эти вставки без каких-либо ошибок.

спасибо

7 65

7 ответов:

можно использовать вставить... Игнорировать синтаксис, если вы не хотите предпринимать никаких действий, когда есть дубликат записи.

можно использовать ЗАМЕНИТЬ НА синтаксис, если вы хотите перезаписать старую запись с новой с тем же ключом.

или, вы можете использовать вставить... ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА синтаксис если вы хотите выполнить обновление записи, а не когда вы сталкиваетесь с дубликатом.

Edit: думал, что я добавлю некоторые образцы.

примеры

скажем, у вас есть таблица с именем tbl С двумя колонками, id и value. Есть одна запись, id=1 и value=1. Если вы выполните следующие инструкции:

REPLACE INTO tbl VALUES(1,50);

у вас еще есть одна запись, с id=1 значение=50. Обратите внимание, что сначала была удалена вся запись, а затем снова вставлена. Затем:

INSERT IGNORE INTO tbl VALUES (1,10);

операция выполняется успешно, но ничего не вставляется. У вас все еще есть id=1 и значение=50. Наконец:

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

теперь у вас есть одна запись с id=1 и value=200.

можно использовать триггеры.

также проверить это введение руководство по триггерам.

попробуйте создать дубликат таблицы, предпочтительно временную таблицу, без ограничения unique и выполните массовую загрузку в эту таблицу. Затем выберите только уникальные (отдельные) элементы из временной таблицы и вставьте их в целевую таблицу.

Как выглядит схема базы данных?

вы можете добавить столбец ID, который будет автоинкремент для каждой вставки, чтобы гарантировать уникальные строки.

вопрос: я создаю базу данных с клиентами. Я знаю, что вы используете инструкцию "insert" для вставки информации в базу данных, но как я могу убедиться, что я не ввожу ту же информацию о клиенте снова?

ответ: вы можете убедиться, что вы не вставляете дублирующуюся информацию, используя условие EXISTS.

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

этот оператор вставляет несколько записей с подвыборкой.

Если вы хотите вставить одну запись, вы можете использовать следующую инструкцию:

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

использование двойной таблицы позволяет вводить значения в инструкции select, даже если значения в настоящее время не хранятся в таблице.

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

$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