2012-03-26 2 views
-4

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

Количество записей для вставки: ~ 1000

строк в таблице: ~ 1.000.000

Таблица:

CREATE TABLE `test` (
    `A` varchar(19) NOT NULL, 
    `B` varchar(9) NOT NULL, 
    KEY `A` (`A`), 
    KEY `B` (`B`) 
) ENGINE=InnoDB; 

мне нужно проверить для обеих колонок:

Что это эффективный способ сделать это.

Заранее спасибо.

P.S. рассмотрите использование php и mysql

+0

На самом деле ничего. Единственное, что приходит на ум, это проверить каждую запись против дублирования. Но это не кажется эффективным. Что вы хотите сделать? – Turgut

+0

Есть ли что-то, препятствующее использованию уникального ключа для отклонения дубликатов? – gapple

+0

@ Тургут: мы не любим людей, которые ничего не пробовали, прежде чем задавать вопрос :) Вы должны пойти и попробовать * что-то *. Может быть, у вас будет лучший вопрос. Может быть, у вас не будет вопроса вообще. –

ответ

1

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

1] использовать цикл для группы всех имен пользователей, что находится в вашем списке вставки: псевдо-код следующим образом:

$names=""; 
    for(each element){ 
     $names.=$val.", "; 
    //remove last comma "," 

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

select * from myTable where username in ($names); 

, получив список всех ваших дубликатов, а затем вставить в

insert into myTable (username, address, otherstuff) 
values("henry", "35 skid", "who knows") 
ON DUPLICATE KEY UPDATE 
otherstuff = values(otherstuff); 
0

Одним из способов сделать это может быть вставить все в любом случае, затем select duplicates для их вывода; и если обнаружено, что откат завершен всей операции. Это было бы довольно дорого.

Смежные вопросы