Mysql
 sql >> Baza danych >  >> RDS >> Mysql

przed wstawieniem wyzwalacza do wstawiania zduplikowanych wierszy do innej tabeli

Jeśli chodzi o wyzwalanie, istnieje kilka problemów:

  1. nie masz ; po instrukcji insert
  2. IF instrukcja powinna kończyć się END IF i średnik, a nie tylko END
  3. musisz zmienić ogranicznik za pomocą DELIMITER polecenie
  4. użyj EXISTS() zamiast COUNT()

Powiedziawszy to, twój wyzwalacz może wyglądać tak

DELIMITER $$
CREATE TRIGGER tblspmaster_noduplicate
BEFORE INSERT ON tblspmaster
FOR EACH ROW
BEGIN
  IF (EXISTS(SELECT * FROM tblspmaster WHERE sp = NEW.sp)) THEN
    INSERT INTO tblspduplicate (sp,FileImported,AMZFileName)   
    VALUES (NEW.sp, NEW.FileImported, NEW.AMZFileName);
  END IF;
END$$
DELIMITER ;

Oto SQLFiddle demo

Użyj IGNORE klauzula w LOAD DATA INFILE oświadczenie. MySql potraktuje błędy (naruszenie ograniczenia unikatowego) jako ostrzeżenia skutecznie odrzucające duplikaty.

LOAD DATA LOCAL INFILE 'E://31october//SP//sp_files_sample1//400k sp00 6-19 E.csv' 
IGNORE  
INTO TABLE tblspmaster 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
-- IGNORE 1 LINES

Uwaga: Nieudane wstawienie FYI dla zduplikowanych wierszy spowoduje pozostawienie przerw w wartościach auto_increment SCN kolumna.

Możesz rozważyć inne podejście, które może być bardziej korzystne pod względem wydajności:

  1. utwórz tymczasową tabelę pomostową bez ograniczeń i indeksów
  2. użyj LOAD DATA INFILE wypełnić tabelę pomostową
  3. posiadanie tblspmaster i tabelę pomostową i używając INSERT ... SELECT składnia wstawia wszystkie duplikaty w tblspduplicate za jednym zamachem
  4. wstaw tylko nieistniejące wiersze z tabeli pomostowej do tblspmaster ponownie za jednym razem
  5. TRUNCATE lub DROP stół inscenizacyjny



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź całkowitą liczbę wyników w zapytaniu mySQL z przesunięciem+limit

  2. JSON_REMOVE() – Usuń dane z dokumentu JSON w MySQL

  3. PHP:Pokaż okno dialogowe potwierdzenia tak/nie

  4. Uruchom MySQL INSERT Query wiele razy (wstaw wartości do wielu tabel)

  5. Pisanie zapytania SQL do pozycji SELECT z poniższej tabeli