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

Làm thế nào để kiểm tra bản ghi hiện có trước khi chèn bản ghi cho từng người dùng vào cùng một bảng?

Một phương pháp đơn giản chỉ sử dụng kết hợp có điều kiện:

insert into users_settings (user_id, key)
    select user_id, 'app_reminder'
    from users_settings
    group by user_id
    having sum(key = 'app_reminder') = 0;

Bạn có thể muốn một giải pháp chung chung hơn. Nếu bạn muốn đảm bảo rằng các cặp khóa / người dùng không bao giờ bị trùng lặp, thì hãy tạo một ràng buộc hoặc chỉ mục duy nhất trên các cột đó:

alter table users_settings add constraint unq_users_settings_user_id_key
    unique (user_id, key);

Sau đó, bạn có thể bỏ qua việc chèn các hàng bằng on duplicate key update :

insert into users_settings (user_id, key)
    select distinct user_id, 'app_reminder'
    from users_settings
    on duplicate key update user_id = values(user_id);

Bản cập nhật update không làm gì cả, bởi vì giá trị là như nhau. MySQL bỏ qua việc chèn và không trả lại lỗi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phân chia trong truy vấn Mysql

  2. Cấu trúc tệp văn bản (bảng)

  3. ngăn chặn các mục nhập trùng lặp vào cơ sở dữ liệu

  4. Cách sửa chữa cơ sở dữ liệu và bảng MySQL

  5. Python / Django MySQL Xử lý ngày giờ và múi giờ