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

Pembaruan SQL pada pembaruan kunci duplikat

Hal pertama yang pertama, kunci primer multi-kolom itu mungkin ide yang buruk; seperti yang telah Anda ketahui, itu membuat sulit untuk memanipulasi bidang individu. Apa yang harus Anda lakukan adalah menambahkan kolom bigint autoincrement ke tabel itu, yang akan menjadi kunci utama baru Anda, dan batasan keunikan tiga kolom Anda bisa menjadi indeks unik sebagai gantinya. Ini akan bekerja lebih baik... tetapi juga memungkinkan Anda untuk melakukan manipulasi yang Anda butuhkan juga. Ini akan memungkinkan Anda melakukan modifikasi tetapi tetap memungkinkan Anda mengidentifikasi baris asli dengan indeks bilangan bulatnya.

Jika Anda melakukannya, "pembaruan satu kali" Anda sekarang dapat dilakukan dengan aman, selama Anda tidak keberatan membuat beberapa tabel sementara untuk digunakan. Sesuatu seperti ini:

Buat beberapa tabel sementara dengan skema yang sama, tetapi tanpa unik indeks tiga kolom - Anda dapat memiliki indeks non-unik, karena ini akan membantu kueri yang akan Anda lakukan;

Salin catatan yang perlu Anda proses ke tabel pertama (termasuk kunci utama bilangan bulat unik);

Perbarui semua detail kolom yang perlu Anda perbarui di tabel sementara;

Gunakan INSERT ... SELECT dengan SUM dan GROUP BY untuk menggabungkan record-record tersebut ke dalam tabel kedua;

INSERT INTO temp2 (...whatever...) SELECT ...whatever..., SUM(no) FROM temp1 GROUP BY ...whatever...

Terakhir, hapus semua record di tabel temp1 dari tabel asli (menggunakan kunci utama integer), dan masukkan record di tabel temp2 ke tabel asli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JDBC - Pernyataan, Pernyataan Siap, Pernyataan Dapat Dipanggil, dan cache

  2. Stempel waktu Laravel untuk ditampilkan dalam milidetik

  3. Bagaimana menghubungkan database mySQL menggunakan C++

  4. membuat halaman login dengan PHP

  5. Variabel 'sql_mode' tidak dapat disetel ke nilai 'REPLACE