MySQL Chèn khóa trùng lặp bỏ qua

Mysql Insert Ignore Duplicate Key



Thường có dữ liệu xung đột trong các bảng hoặc tập hợp kết quả. Việc sửa cũng tốn nhiều thời gian và cần tránh các bản ghi lặp lại thường xuyên. Việc xác định các bản ghi trùng lặp và xóa chúng khỏi một trong hai bảng là cần thiết. Phần này sẽ trình bày chi tiết về cách tránh dữ liệu trùng lặp xuất hiện bên trong bảng và cách loại bỏ các bản ghi trùng lặp hiện tại. Trong hướng dẫn này, bạn sẽ học cách sử dụng mệnh đề INSERT IGNORE để tránh lỗi.

Cú pháp:

Đây là cú pháp cho truy vấn CHÈN BỎ QUA.







>>CHÈN BỎ QUA VÀO tên_bảng(col1, col2, col3)GIÁ TRỊ(value_list),(value_list),(value_list);

CHÈN BỎ QUA qua Workbench:

Mở MySQL Workbench 8.0 từ hệ thống của bạn và kết nối nó với phiên bản cơ sở dữ liệu.





Trong vùng lệnh, bạn phải tạo một bảng Employee với bốn cột trong đó một trong số chúng phải được chỉ định là UNIQUE. Hãy thử truy vấn dưới đây trong vùng truy vấn của trình điều hướng để tạo bảng này. Chọn toàn bộ truy vấn và nhấp vào dấu nháy để thực thi nó.





>>NHÂN VIÊN TẠO BẢNG(ID int PRIMARY KEY NOT NULL, Name varchar(năm mươi)KHÔNG ĐỦ, Age Varchar(năm mươi), Lương varchar(năm mươi), DUY NHẤT(TÔI));

Sau khi tạo, bạn có thể tìm thấy nhân viên của bảng trong danh sách dưới tùy chọn Bảng bên dưới dữ liệu cơ sở dữ liệu.



Trong dạng xem lưới, bạn có thể nhập các bản ghi mà không cần nhập bất kỳ truy vấn nào. Vì vậy, hãy mở dạng xem lưới của nhân viên bảng và thêm một số bản ghi trong đó như hình dưới đây. Chúng tôi đã nhập tất cả các bản ghi duy nhất mà không có bất kỳ bản sao nào. Nhấn nút 'Áp dụng' để áp dụng các thay đổi.

Một cửa sổ mới sẽ được mở ra với các truy vấn có liên quan liên quan đến các bản ghi mà chúng tôi đã nhập ở trên. Màn hình này có thể được gọi là màn hình Xem lại. Nếu bạn muốn thay đổi điều gì đó, bạn có thể thực hiện tại đây. Nếu không, hãy nhấn nút Áp dụng để thực hiện các truy vấn.

Như bạn có thể thấy, truy vấn đã được thực thi thành công và các bản ghi được lưu vào cơ sở dữ liệu và bảng Employee của nó. Nó sẽ tạo ra lỗi nếu chúng tôi đã thêm bất kỳ giá trị trùng lặp nào trong ID cột. Nhấn vào nút Hoàn tất.

Đây là tất cả về chế độ xem lưới. Bây giờ, chúng ta sẽ chèn các bản ghi qua vùng truy vấn. Trong khi đó, chúng tôi đã chèn các bản ghi trùng lặp lần này để kiểm tra kết quả đầu ra. Vì vậy, chúng tôi đã thử truy vấn INSERT bên dưới, nơi chúng tôi có hai danh sách giá trị. Cả hai danh sách giá trị đều có cùng giá trị tại cột ‘ID’. Chọn truy vấn và nhấn vào dấu nháy để thực hiện truy vấn.

Truy vấn sẽ không hoạt động chính xác và nó sẽ tạo ra lỗi do các giá trị trùng lặp trong lệnh INSERT như được hiển thị trong hình ảnh.

Bây giờ hãy thử truy vấn tương tự ở trên với mệnh đề INSERT IGNORE và thực thi nó như đã trình bày.

Bạn có thể thấy rằng nó không tạo ra lỗi trong vùng đầu ra, nhưng nó đưa ra cảnh báo rằng lệnh chứa các giá trị trùng lặp.

Làm mới chế độ xem lưới của bảng Nhân viên. Truy vấn CHÈN BỎ QUA đã hoạt động được một nửa. Nó đã chèn danh sách giá trị đầu tiên vào bảng, nhưng danh sách giá trị thứ hai đã bị bỏ qua do giá trị 13 lặp lại.

CHÈN BỎ QUA qua Command-Line Shell:

Để hiểu khái niệm này, hãy mở shell client dòng lệnh MySQL trong hệ thống của bạn. Khi được hỏi, hãy nhập mật khẩu MySQL của bạn để bắt đầu làm việc với nó.

Bây giờ đã đến lúc tạo một bảng. Hãy thử lệnh dưới đây để làm như vậy. Chúng tôi đã tạo một bảng có tên là 'Minister' trong khi một trong các cột của nó có một ràng buộc DUY NHẤT. Rõ ràng là ID cột sẽ chỉ chấp nhận các giá trị duy nhất và không chấp nhận các giá trị trùng lặp.

>>TẠO BẢNG data.minister(Mid INT PRIMARY KEY UNIQUE NOT NULL, Đặt tên VARCHAR(Bốn năm), Thành phố VARCHAR(Bốn năm));

Truy vấn hoạt động thích hợp và bảng đã được tạo. Để hiểu mệnh đề INSERT IGNORE, trước tiên bạn phải thấy lệnh INSERT đơn giản đang hoạt động. Nếu bạn đang sử dụng lệnh INSERT để chèn một số dữ liệu thông tin vào bảng, MySQL sẽ tạm ngừng giao dịch và tạo ra một ngoại lệ nếu có lỗi xảy ra trong suốt quá trình xử lý. Do đó, bảng không có bất kỳ hàng nào được thêm vào nó. Hãy chèn bản ghi đầu tiên vào bộ tướng bảng bằng cách sử dụng truy vấn được hiển thị bên dưới. Truy vấn sẽ hoạt động thành công vì bảng hiện đang trống và không có bản ghi nào để đối chiếu với.

Vì ID cột là DUY NHẤT, khi chúng tôi thử hướng dẫn bên dưới trên trình bao dòng lệnh, nó sẽ tạo ra lỗi. Điều này là do chúng tôi đã thêm giá trị 11 trong truy vấn trước đó và do khóa UNIQUE nên không cho phép chúng tôi thêm lại giá trị lặp lại.

Do đó, khi kiểm tra bảng, chúng ta có thể thấy rằng bảng chỉ có 1 bản ghi được thêm bởi truy vấn INSERT đầu tiên.

>>LỰA CHỌN*TỪ data.minister;

Ngược lại, nếu bạn đang sử dụng mệnh đề CHÈN BỎ QUA, các hàng dữ liệu không chính xác gây ra lỗi sẽ bị bỏ qua và chỉ nhập những hàng chính xác. Trong lệnh dưới đây, chúng tôi đã sử dụng lệnh INSERT IGNORE để tránh thêm các giá trị lặp lại vào bảng và bỏ qua lỗi. Như bạn có thể thấy, danh sách giá trị đầu tiên có giá trị trùng lặp 11 giống như trong truy vấn trước đó. Trong khi danh sách giá trị thứ hai là duy nhất, nó sẽ hiển thị 1 bản ghi được chèn vào bảng, đó là danh sách giá trị thứ hai. MySQL cũng chỉ ra rằng chỉ có 1 bản ghi đã được chèn và 1 cảnh báo được tạo trong thông báo. Sau đó, bạn có thể giả định rằng nếu chúng tôi đang sử dụng điều khoản INSERT IGNORE, MySQL sẽ đưa ra một cảnh báo.

Như bạn có thể thấy từ kết quả bên dưới, chúng tôi chỉ có hai bản ghi trong bảng này — danh sách giá trị đầu tiên được cung cấp trong truy vấn trên, bị bỏ qua.

>>LỰA CHỌN*TỪ data.minister;

Phần kết luận:

Chúng tôi đã thực hiện tất cả các ví dụ cần thiết về CHÈN BỎ QUA về các giá trị trùng lặp thông qua MySQL Workbench và MySQL command-line client shell.