перед вставкой триггер для вставки повторяющихся строк в другую таблицу
У меня есть столtblspmaster
в котором столбец sp у меня есть уникальный индекс, поэтому не будет вставлено дубликатов, но я хочу вставить дублирующиеся строки вtblspduplicate
, поэтому я решил написать триггер для этого. В основной таблице, котораяtblspmaster
записи будут вставлены с использованием файла загрузкиmysql
create trigger tblspmaster_noduplicate
before insert on tblspmaster
for each row
begin
if ( select count(sp) from tblspmaster where sp=new.sp > 0 )then
insert into tblspduplicate (sp,FileImported,AMZFileName) values (NEW.sp,NEW.FileImported,NEW.AMZFileName)
END
END
У меня есть список вопросов
Это правильный подход, чтобы остановить дубликаты и вставить в другую таблицу?
Мой триггер не выполняется, поскольку он показывает некоторые синтаксические ошибки
ОШИБКА ответError Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END END' at line 7
****************РЕДАКТИРОВАНИЕ **************
Вот определение таблицы для основной и дубликатов таблиц, а также триггера и загрузки данных в файл MySQL операторов
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 ;
CREATE TABLE IF NOT EXISTS `tblspduplicate` (
`SP` varchar(50) NOT NULL,
`FileImportedDate` date NOT NULL,
`AMZFileName` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
use casper;
DELIMITER $
create trigger tblspmaster_noduplicate
before insert on tblspmaster
for each row
begin
if ( select count(sp) from tblspmaster where sp=new.sp > 0 ) then
insert into tblspduplicate (sp,FileImportedDate,AMZFileName) values (NEW.sp,NEW.FileImportedDate,NEW.AMZFileName);
END IF;
END$
DELIMITER ;
LOAD DATA local INFILE 'E://31october//SP//sp_files_sample1//400k sp00 6-19 E.csv'
INTO TABLE tblspmaster
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(sp);
Вот один поворот в истории, что я выполняю эту команду MySql из консольного приложения c #, но я не думаю, что это каким-либо образом повлияет на нашу структуру или программу, связанную с БД. Мне тоже нужно убратьIGNORE 1 LINES
Заявление, так как не будет строки заголовка.