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

Bagaimana mencegah duplikat sisipan ke dalam tabel

Anda tidak memiliki kunci unik di alamat email . Itu adalah harapan terbaik Anda, sebanyak mungkin John Doe dalam sistem. Jadi indeks komposit unik pada nama lengkap bukanlah ide yang baik.

Seseorang dapat mengeluarkan INSERT IGNORE yang bekerja keras setelah pelanggaran duplikat seolah-olah tidak ada yang terjadi (ini sangat tidak disarankan, dan dalam kasus Anda tidak mungkin karena batasan unik Anda pada email tidak ada). Masalah utama dengan melakukan ini adalah bahwa Anda cenderung (baca:mungkin akan) kehilangan semua kendali atas apa yang terjadi dan dibiarkan dengan data yang tidak diinginkan. Jadi jangan menggunakannya, kecuali Anda seorang profesional.

Seseorang dapat mengeluarkan dan INSERT ON DUPLICATE KEY UPDATE (alias IODKU) yang juga memerlukan kunci unik (bisa juga komposit unik). Dengan demikian, baris baru tidak akan muncul tetapi pembaruan ke baris. Sebagai contoh, baris baru dengan 4 kolom dapat disisipkan, tetapi pada pelanggaran duplikasi, pembaruan dapat dilakukan hanya pada dua kolom, seperti

dengan asumsi di bawah PK pada kolom yang tidak terlihat id int , dan kunci unik di emailAddr

insert person(firstName,lastName,emailAddr) values 'Joe','Smith','[email protected]' 
on duplicate key update firstName='Joe',lastName='Smith'

Ini adalah kunci unik di emailAddr yang membuat ini berfungsi. Tersisa hanya 1 baris per emailAddr, selamanya.

Jadi, Anda dapat memiliki Joe Smiths tanpa batas, tetapi hanya 1 baris per alamat email.

Tabel buat untuk tabel di atas bisa terlihat seperti

create table person
(  id int auto_increment primary key,
   firstName varchar(50) not null,
   lastName varchar(50) not null,
   emailAddr varchar(150) not null,
   unique key(emailAddr)  -- without this, IODKU will not work
);

Anda juga dapat mengeluarkan perintah ALTER TABLE untuk menambahkan batasan setelah tabel dibuat. Tergantung pada data di dalamnya, panggilan mungkin gagal.

Mysql Sisipkan pada Pembaruan Kunci Duplikat , dan Ubah Tabel halaman manual.

Saya akan mengatakannya lagi, tanpa pengaturan skema yang tepat, IODKU tidak akan berfungsi dan Anda akan ditinggalkan dengan baris yang tidak diinginkan. Jadi jangan malas melakukannya. Skema penyiapan pertama memungkinkannya untuk sukses (dengan kunci unik), lalu lanjutkan menggunakan IODKU.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus tag HTML dari catatan

  2. Membaca lembar XLSX untuk memberi makan tabel MySQL menggunakan PHPExcel

  3. Bagaimana menghubungkan Grails 3.0 ke database Mysql lokal saya

  4. Saya tidak dapat memuat driver JDBC untuk MySQL

  5. Baris MySQL dihapus saat program keluar