2013-09-03 2 views
0

У меня есть таблица, в которой есть имя столбца с SP varchar(10) NOT NULL. Я хочу, чтобы этот столбец всегда был уникальным, поэтому я создал уникальный индекс в этом столбце. Моя схема таблицы следующим образом:изменить таблицу stat для вставки дубликата в другую таблицу

CREATE TABLE IF NOT EXISTS `tblspmaster` (
    `CSN` bigint(20) NOT NULL AUTO_INCREMENT, 
    `SP` varchar(10) NOT NULL, 
    `FileImportedDate` date NOT NULL, 
    `AMZFileName` varchar(50) NOT NULL, 
    `CasperBatch` varchar(50) NOT NULL, 
    `BatchProcessedDate` date NOT NULL, 
    `ExpiryDate` date NOT NULL, 
    `Region` varchar(50) NOT NULL, 
    `FCCity` varchar(50) NOT NULL, 
    `VendorID` int(11) NOT NULL, 
    `LocationID` int(11) NOT NULL, 
    PRIMARY KEY (`CSN`), 
    UNIQUE KEY `SP` (`SP`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10000000000 ; 

Теперь я хочу, что если кто-то пытается вставить дубликат записи, то, что запись должна быть вставлена ​​во вторичное имя таблицы tblDuplicate.

Я прошел через этот вопрос MySQL - ignore insert error: duplicate entry, но я не уверен, что вместо

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

может я вставить повторяющуюся строку в другую таблицу?

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

** Примечание: Данные будут вставлены путем импорта первенствовать или CSV-файлов и файлов Excel обычно содержит 500k 800 к записям, но там будет только один один столбец **

+0

Можете ли вы использовать хранимую процедуру для вставки/обновления вместо прямых операторов SQL? Если это так, хранимая процедура может обрабатывать логику, для которой таблица должна вставляться в –

+0

. Примечание. Данные будут вставлены путем импорта файлов excel или csv из службы окна. любая идея, как я могу это реализовать? – rahularyansharma

ответ

1

Я считаю, что вы хотите использовать триггер для этого. Вот справочная глава MySQL по адресу triggers.

Используйте перед триггером вставки. В триггере проверьте, является ли строка дубликат (возможно, count (*), где значение ключевого столбца = значение должно быть вставлено). Если строка является дубликатом, выполните вставку во вторую таблицу.

+0

Файл Excel может иметь около 500 тыс. Записей, а через один день может быть вставлено 20-30 файлов. Является ли это решение триггера возможным? – rahularyansharma

+0

триггер не означает медленное. Триггер будет запускаться для каждой вставки. Медленная часть будет кодом, который выполняется при запуске триггера, поэтому постарайтесь сделать это эффективным. – DwB

+0

Я использую следующую команду LOAD DATA local INFILE 'E: // 31october // Anuj taneja - SP // sp_files_sample1 // 400k sp00 6-19 E.csv' INTO TABLE tblspmaster ПОЛЯ, ОГРАНИЧИВАЕМАЯ ',' ENCLOSED BY ' "' ESCAPED BY' \\ ' LINES TERMINATED BY' \ n ' IGNORE 1 LINES (sp), чтобы вставить csv-файл. Теперь, если я запустил тот же файл снова, тогда все записи должны войти в дополнительную таблицу – rahularyansharma

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