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

Perilaku MySQL dari ON DUPLICATE KEY UPDATE untuk beberapa bidang UNIK

Pertimbangkan

INSERT INTO table (a,b,c) VALUES (1,2,3)
    -> ON DUPLICATE KEY UPDATE c=c+1;

Jika a dan b adalah UNIQUE bidang, UPDATE terjadi pada a = 1 OR b = 2 . Juga ketika kondisi a = 1 OR b = 2 dipenuhi oleh dua atau lebih entri, pembaruan hanya dilakukan sekali.

Contoh tabel tabel di sini dengan Id dan Nama UNIQUE bidang

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6

Jika kuerinya adalah

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);

maka kita mendapatkan

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6
1      C        7

yang melanggar keunikan Id dan Nama. Sekarang dengan

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;

kita mendapatkan

Id     Name     Value 
1      P        7 
2      C        7 
3      D        29 
4      A        6

Perilaku pada beberapa tombol adalah sebagai berikut

UPDATE di ON DUPLICATE KEY UPDATE dilakukan jika salah satu dari UNIQUE field sama dengan nilai yang akan disisipkan. Di sini, UPDATE dilakukan pada Id = 1 OR Name = C . Ini setara dengan

UPDATE table 
SET Value = 7
WHERE Id = 1 OR Name = C;

Bagaimana jika saya hanya menginginkan satu pembaruan, untuk salah satu kunci

Dapat menggunakan UPDATE pernyataan dengan LIMIT kata kunci

UPDATE table 
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;

yang akan memberikan

Id     Name     Value 
1      P        7 
2      C        3 
3      D        29 
4      A        6

Bagaimana jika saya hanya ingin satu pembaruan jika nilai untuk kedua kunci cocok

Salah satu solusinya adalah dengan ALTER TABLE dan buat PRIMARY KEY (atau keunikan) bekerja di kedua bidang.

ALTER TABLE table 
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);

Sekarang, pada

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;

kita mendapatkan

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6
1      C        7

karena tidak ada duplikat (pada kedua kunci) yang ditemukan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konversi format tanggal AS ke format tanggal ANSI SQL (YYYY-mm-dd)

  2. Bagaimana saya bisa Memasukkan Data ke dalam Database MySQL?

  3. Kesalahan mysql 1452 - Tidak dapat menambah atau memperbarui baris anak:batasan kunci asing gagal

  4. Menggunakan HHVM Dengan WordPress

  5. Tidak dapat menambah atau memperbarui baris anak:batasan kunci asing gagal