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

Cách tránh chèn các bản ghi trùng lặp trong MySQL

Đôi khi bạn có thể cần ngăn chèn trùng lặp trong khi thêm hàng vào bảng MySQL. Bạn có thể dễ dàng thực hiện việc này bằng cách sử dụng câu lệnh INSERT IGNORE. Trong bài viết này, chúng ta sẽ xem xét cách tránh chèn các bản ghi trùng lặp trong MySQL.


Cách tránh chèn các bản ghi trùng lặp trong MySQL

Dưới đây là các bước để tránh chèn các bản ghi trùng lặp trong MySQL. Có hai phần cần ghi nhớ. Đầu tiên, bạn cần tạo chỉ mục cột DUY NHẤT cho bảng của mình. Tiếp theo, bạn cần chèn dữ liệu bằng cách sử dụng CHÈN BỎ QUA để tránh các bản ghi trùng lặp.

Giả sử bạn có bảng sau doanh số bán hàng (id, order_date, amount)

mysql> create table sales(
          id int, 
          order_date date, 
          amount int
          );


1. Tạo chỉ mục duy nhất

Chúng tôi thêm chỉ mục DUY NHẤT cho id sử dụng câu lệnh ALTER TABLE.

Đây là cú pháp để tạo chỉ mục DUY NHẤT trong MySQL.

alter table table_name ADD UNIQUE INDEX(
        column_name1, 
        column_name2,
        ...
        column_nameN
        );

Đây là truy vấn SQL để thêm chỉ mục DUY NHẤT vào id trong doanh số bán hàng bảng.

mysql> alter table sales ADD UNIQUE INDEX(id);


2. Chèn dữ liệu bằng CHÈN BỎ QUA

Tiếp theo, chúng tôi sẽ chèn dữ liệu bằng cách sử dụng CHÈN BỎ QUA.

Trước khi tiếp tục, chúng ta hãy xem INSERT IGNORE trong MySQL là gì và INSERT IGNORE hoạt động như thế nào.


CHÈN BỎ QUA là gì?

INSERT IGNORE là lệnh buộc MySQL bỏ qua lỗi khi bạn chèn dữ liệu vào bảng MySQL.


CHÈN BỎ QUA hoạt động như thế nào?

Trong trường hợp của chúng tôi, chúng tôi đã tạo chỉ mục DUY NHẤT cho id cột. Nếu chúng ta sử dụng câu lệnh INSERT để thêm dữ liệu có các hàng trùng lặp, MySQL sẽ báo lỗi và dừng thực thi truy vấn sau hàng trùng lặp đầu tiên.

Thay vào đó, khi chúng ta sử dụng CHÈN BỎ QUA, MySQL sẽ âm thầm loại bỏ việc chèn hàng trùng lặp mà không tạo ra lỗi và tiếp tục thực thi truy vấn.

Vì vậy, nếu một bản ghi không chứa dữ liệu trùng lặp, MySQL sẽ chèn nó như bình thường. Nếu đó là một bản ghi trùng lặp, thì MySQL sẽ đơn giản bỏ qua nó.

Đây là truy vấn SQL để chèn dữ liệu không trùng lặp trong bán hàng bảng.

mysql> mysql> insert ignore into sales(id,order_date,amount)
     values(1, '2021-01-01', 250),
     (1, '2021-01-01', 250),
     (2, '2021-01-02', 200),
     (3, '2021-01-03', 150),
     (2, '2021-01-02', 200);
Query OK, 3 rows affected (0.10 sec)
Records: 5  Duplicates: 2  Warnings: 0

mysql> select * from sales;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2021-01-01 |    250 |
|    2 | 2021-01-02 |    200 |
|    3 | 2021-01-03 |    150 |
+------+------------+--------+

Như bạn có thể thấy, MySQL tránh chèn các hàng trùng lặp mà không tạo ra bất kỳ lỗi nào.

Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli:nó có thể chuẩn bị nhiều truy vấn trong một câu lệnh không?

  2. Không thể kết nối với máy chủ MySQL lỗi 111

  3. Hệ thống cấu hình không thể khởi tạo

  4. MySQL DELETE FROM với truy vấn con là điều kiện

  5. So sánh quản trị cơ bản giữa Oracle, MSSQL, MySQL, PostgreSQL