Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

sebelum memasukkan pemicu untuk menyisipkan baris duplikat ke tabel lain

Sejauh yang Anda ketahui, ada beberapa masalah:

  1. Anda tidak memiliki ; setelah menyisipkan pernyataan
  2. IF pernyataan harus diakhiri dengan END IF dan titik koma, bukan hanya END
  3. Anda harus mengubah pembatas dengan DELIMITER perintah
  4. gunakan EXISTS() daripada COUNT()

Meskipun demikian, pemicu Anda mungkin terlihat seperti

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 ;

Ini SQLFiddle demo

Gunakan IGNORE klausa dalam LOAD DATA INFILE penyataan. MySql akan memperlakukan kesalahan (melanggar batasan unik) sebagai peringatan yang secara efektif membuang duplikat.

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

Catatan: FYI penyisipan yang gagal untuk baris duplikat akan meninggalkan celah dalam nilai auto_increment SCN kolom.

Anda dapat mempertimbangkan pendekatan lain yang mungkin lebih disukai dari segi kinerja:

  1. buat tabel staging sementara tanpa batasan dan indeks
  2. gunakan LOAD DATA INFILE untuk mengisi tabel staging
  3. memiliki tblspmaster dan tabel staging dan menggunakan INSERT ... SELECT sintaks masukkan semua duplikat di tblspduplicate dalam sekali jalan
  4. masukkan hanya baris yang tidak ada dari tabel pementasan ke tblspmaster lagi dalam sekali jalan
  5. TRUNCATE atau DROP meja pementasan



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan JDeveloper dengan Database MySQL dan Database Oracle di AWS RDS, Bagian 1

  2. Jenis apa yang akan Anda petakan BigDecimal di Java/Hibernate di MySQL?

  3. Buat Pengguna MySQL di Linux melalui Command Line

  4. konversi daftar ke string untuk dimasukkan ke dalam sql saya dalam satu baris dengan python scrapy

  5. Saat menjalankan UPDATE ... datetime =NOW(); apakah semua baris yang diperbarui memiliki tanggal/waktu yang sama?