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

Cập nhật khóa chính MySQL

Lần tới, hãy sử dụng một câu lệnh "bảng thay thế" để cập nhật khóa chính.

alter table xx drop primary key, add primary key(k1, k2, k3);

Để khắc phục sự cố:

create table fixit (user_2, user_1, type, timestamp, n, primary key( user_2, user_1, type) );
lock table fixit write, user_interactions u write, user_interactions write;

insert into fixit 
select user_2, user_1, type, max(timestamp), count(*) n from user_interactions u 
group by user_2, user_1, type
having n > 1;

delete u from user_interactions u, fixit 
where fixit.user_2 = u.user_2 
  and fixit.user_1 = u.user_1 
  and fixit.type = u.type 
  and fixit.timestamp != u.timestamp;

alter table user_interactions add primary key (user_2, user_1, type );

unlock tables;

Khóa sẽ ngừng cập nhật thêm trong khi bạn đang thực hiện việc này. Việc này mất bao lâu rõ ràng phụ thuộc vào kích thước bảng của bạn.

Vấn đề chính là nếu bạn có một số bản sao có cùng dấu thời gian.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhiều quan hệ với cùng một mô hình CakePHP

  2. Mysql - Giúp tôi thay đổi truy vấn tìm kiếm này để nhận được kết quả mong muốn

  3. Sao lưu các phương pháp hay nhất cho MySQL, MariaDB và Galera Cluster

  4. Không thể sử dụng kết nối MySQL cho khung thực thể 6

  5. MySQL cho kết quả sai với GROUP BY và ORDER BY