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

Cách ngăn chèn trùng lặp vào bảng

Bạn không có khóa duy nhất trên địa chỉ email . Đó là hy vọng tốt nhất của bạn, vì nhiều John Doe có thể có trong hệ thống. Vì vậy, một chỉ mục tổng hợp duy nhất trên tên đầy đủ không phải là một ý tưởng hay.

Người ta có thể đưa ra một CHÈN BỎ QUA sẽ xảy ra sau khi vi phạm trùng lặp như thể không có gì xảy ra (điều này rất không được khuyến khích và trong trường hợp của bạn là không thể vì không có ràng buộc duy nhất của bạn đối với email). Vấn đề chính khi làm điều này là xu hướng của bạn (đọc:có thể là sẽ) mất tất cả quyền kiểm soát luồng những gì đang xảy ra và bị bỏ lại với dữ liệu không mong muốn. Vì vậy, đừng sử dụng nó, trừ khi bạn là một người chuyên nghiệp.

Người ta có thể gặp sự cố và CHÈN VÀO CẬP NHẬT TỪ KHÓA DUPLICATE (a.k.a. IODKU) cũng yêu cầu một khóa duy nhất (cũng có thể là một tổ hợp duy nhất). Như vậy, một hàng mới sẽ không xảy ra mà là một bản cập nhật cho hàng. Ví dụ:một hàng mới có 4 cột có thể được chèn, nhưng nếu vi phạm trùng lặp, cập nhật có thể được thực hiện chỉ trên hai trong số các cột, chẳng hạn như

giả sử bên dưới một PK trên cột không nhìn thấy id int và một khóa duy nhất trên emailAddr

insert person(firstName,lastName,emailAddr) values 'Joe','Smith','[email protected]' 
on duplicate key update firstName='Joe',lastName='Smith'

Đó là chìa khóa duy nhất trên emailAddr làm cho điều này hoạt động. Chỉ còn lại 1 hàng cho mỗi emailAddr, mãi mãi.

Vì vậy, bạn có thể có Joe Smith không giới hạn, nhưng chỉ có 1 hàng cho mỗi địa chỉ email.

Bảng tạo cho bảng trên có thể trông giống như

create table person
(  id int auto_increment primary key,
   firstName varchar(50) not null,
   lastName varchar(50) not null,
   emailAddr varchar(150) not null,
   unique key(emailAddr)  -- without this, IODKU will not work
);

Bạn cũng có thể ra lệnh ALTER TABLE để thêm các ràng buộc sau khi bảng được tạo. Tùy thuộc vào dữ liệu trong đó, cuộc gọi có thể không thành công.

Mysql Chèn khi cập nhật khóa trùng lặp Bảng thay thế các trang thủ công.

Tôi sẽ nói lại lần nữa, nếu không có thiết lập lược đồ thích hợp, IODKU sẽ không hoạt động và bạn sẽ bị bỏ lại với các hàng không mong muốn. Vì vậy, đừng lười biếng về nó. Thiết lập lược đồ đầu tiên cho phép nó thành công (với các khóa duy nhất), sau đó chuyển sang sử dụng IODKU.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sử dụng hàm do người dùng MySQL xác định từ bên trong PHP?

  2. Mysqlimport từ đường ống

  3. Sao chép / nhân bản cơ sở dữ liệu mà không cần sử dụng mysqldump

  4. Sự khác biệt giữa INT và UUID trong MySQL

  5. Hình ảnh hiển thị PHP từ cơ sở dữ liệu