Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tôi có thể sử dụng CẬP NHẬT KHÓA KÉP BẬT với truy vấn CHÈN bằng cách sử dụng tùy chọn ĐẶT không?

Tôi đã sử dụng ON DUPLICATE KEY UPDATE rất nhiều. Đối với một số trường hợp, tiện ích mở rộng SQL không chuẩn thực sự đáng sử dụng.

Trước tiên, bạn cần đảm bảo rằng bạn có một ràng buộc khóa duy nhất tại chỗ. ON DUPLICATE KEY UPDATE chức năng chỉ hoạt động nếu có một vi phạm khóa duy nhất.

Đây là định dạng thường được sử dụng:

 $query = "INSERT INTO $table (column1, column2, column3)
 VALUES ('value-1', 'value-2', 'value-3')
 ON DUPLICATE KEY UPDATE
 column1 = values(column1),
 column2 = values(column2),
 column3 = values(column3);"

column1 = values(column1) có nghĩa là "Cập nhật cột1 với giá trị sẽ được chèn nếu truy vấn không đạt đến vi phạm khóa trùng lặp." Nói cách khác, nó chỉ có nghĩa là cập nhật cột1 về những gì nó sẽ có khi chèn hoạt động.

Nhìn vào mã này, có vẻ như không đúng khi bạn đang cập nhật cả ba cột mà bạn đang cố chèn. Cột nào có ràng buộc duy nhất đối với nó?

CHỈNH SỬA:Sửa đổi dựa trên định dạng 'SET' của câu lệnh chèn mysql cho mỗi câu hỏi từ OP.

Về cơ bản để sử dụng ON DUPLICATE KEY UPDATE , bạn chỉ cần viết câu lệnh chèn như bình thường nhưng thêm ON DUPLICATE KEY UPDATE mệnh đề được gắn vào cuối. Tôi tin rằng nó sẽ hoạt động như thế này:

INSERT INTO $table 
    set column1 = 'value-1',
        column2 = 'value-2',
        column3 = 'value-3'
ON DUPLICATE KEY UPDATE
    column1 = values(column1),
    column2 = values(column2),
    column3 = values(column3);

Một lần nữa, một trong các cột bạn đang chèn phải có một chỉ mục duy nhất (hoặc kết hợp các cột). Điều đó có thể là do một trong số chúng là khóa chính hoặc vì có một chỉ mục duy nhất trên bảng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tính thứ hạng trong MySQL

  2. Cách in Datagridview có bảng trong VB

  3. Mã lỗi:1136 Số cột không khớp với số giá trị ở hàng 1) bên trong sp

  4. Lỗi MySQL::'Quyền truy cập bị từ chối đối với người dùng' root '@' localhost '

  5. Làm cách nào để thoát% trong Knex nơi giống như truy vấn?