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

Cập nhật SQL trên bản cập nhật khóa trùng lặp

Điều đầu tiên, khóa chính nhiều cột đó có lẽ là một ý tưởng tồi; như bạn đã phát hiện ra, rất khó để thao tác các trường riêng lẻ. Những gì bạn phải làm là thêm một cột bigint tự động gia tăng vào bảng đó, cột này sẽ trở thành khóa chính mới của bạn và thay vào đó, ràng buộc về tính duy nhất ba cột của bạn có thể là một chỉ mục duy nhất. Nó sẽ hoạt động tốt hơn ... nhưng nó cũng sẽ cho phép bạn thực hiện loại thao tác bạn cần. Nó sẽ cho phép bạn thực hiện các sửa đổi nhưng vẫn cho phép bạn xác định các hàng ban đầu bằng chỉ mục số nguyên của chúng.

Nếu bạn làm điều đó, "cập nhật một lần" của bạn hiện có thể được thực hiện một cách an toàn, miễn là bạn không ngại tạo một số bảng tạm thời để làm việc. Một cái gì đó như thế này:

Tạo một vài bảng tạm thời với cùng một giản đồ, nhưng không có duy nhất chỉ mục ba cột - bạn có thể có một chỉ mục không phải là duy nhất, vì nó sẽ giúp ích cho các truy vấn bạn sắp thực hiện;

Sao chép các bản ghi bạn cần xử lý vào bảng đầu tiên (bao gồm khóa chính số nguyên duy nhất);

Cập nhật tất cả detail các cột bạn cần cập nhật trong bảng tạm thời;

Sử dụng INSERT ... SELECT với SUMGROUP BY để hợp nhất các bản ghi đó vào bảng thứ hai;

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

Cuối cùng, xóa tất cả các bản ghi trong bảng temp1 khỏi bảng gốc (sử dụng khóa chính số nguyên) và chèn các bản ghi trong bảng temp2 vào bảng gốc.



  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ạo mật khẩu sáu ký tự trong MySQL 5.7

  2. Cách thay đổi một sự kiện trong mysql đã được tạo

  3. Có thể mysqli_insert_id trả về id không chính xác trong các ứng dụng có lưu lượng truy cập cao không?

  4. JSON được định dạng tùy chỉnh từ MYSQL PDO để sử dụng trong NVD3.js

  5. Thêm một giá trị cột bổ sung với INSERT ... SELECT trong MySQL