Hướng dẫn insert ignore mysql not working - chèn bỏ qua mysql không hoạt động

11

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Đây là bảng của tôi với một số dữ liệu mẫu

a_id | b_id
------------
  1    225
  2    494
  3    589

Khi tôi chạy truy vấn này

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')

Nó chèn cả hai hàng đó khi nó được cho là bỏ qua cặp giá trị thứ hai (2, 494)

Không có chỉ mục được xác định, cả hai cột đó đều không phải là chính.

Tôi không biết gì?

Đã hỏi ngày 14 tháng 6 năm 2010 lúc 6:32Jun 14, 2010 at 6:32

Hướng dẫn insert ignore mysql not working - chèn bỏ qua mysql không hoạt động

Từ các tài liệu:

Nếu bạn sử dụng từ khóa bỏ qua, các lỗi xảy ra trong khi thực hiện câu lệnh chèn được coi là cảnh báo thay thế. Ví dụ, không bỏ qua, một hàng nhân đôi chỉ mục duy nhất hoặc giá trị khóa chính hiện có trong bảng gây ra lỗi khóa trùng lặp và câu lệnh bị hủy bỏ. Khi bỏ qua, hàng vẫn không được chèn, nhưng không có lỗi nào được ban hành.

(chữ nghiêng của tôi).

Hàng của bạn không sao chép "một chỉ mục duy nhất hoặc giá trị khóa chính hiện có" vì bạn không có khóa chính cũng như bất kỳ ràng buộc duy nhất nào.


Nếu, như bạn đã đề cập trong một trong những nhận xét của bạn, bạn không muốn trường nào là duy nhất nhưng bạn muốn sự kết hợp là duy nhất, bạn cần một khóa chính tổng hợp trên cả hai cột (hãy loại bỏ bất kỳ bản sao nào trước tiên):

alter table MYTABLE add primary key (a_id,b_id)

Đã trả lời ngày 14 tháng 6 năm 2010 lúc 6:39Jun 14, 2010 at 6:39

Hướng dẫn insert ignore mysql not working - chèn bỏ qua mysql không hoạt động

Paxdiablopaxdiablopaxdiablo

829K227 Huy hiệu vàng1550 Huy hiệu bạc1919 Huy hiệu Đồng227 gold badges1550 silver badges1919 bronze badges

Nếu bạn không đặt tiêu chí

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
6 hoặc đặt
INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
7, MySQL sẽ không biết rằng mục mới của bạn là một bản sao.

Đã trả lời ngày 14 tháng 6 năm 2010 lúc 6:38Jun 14, 2010 at 6:38

Julien Hoaraujulien HoarauJulien Hoarau

47.9K20 Huy hiệu vàng127 Huy hiệu bạc117 Huy hiệu đồng20 gold badges127 silver badges117 bronze badges

1

Nếu không có khóa chính, không thể có khóa trùng lặp để bỏ qua. Bạn nên luôn luôn đặt một khóa chính, vì vậy hãy làm điều đó - và nếu bạn muốn có thêm các bản sao không nên trùng lặp, hãy đặt chúng là "duy nhất".

Đã trả lời ngày 14 tháng 6 năm 2010 lúc 6:36Jun 14, 2010 at 6:36

Oezioezioezi

50.1k10 Huy hiệu vàng97 Huy hiệu bạc115 Huy hiệu Đồng10 gold badges97 silver badges115 bronze badges

2

Nếu tôi hiểu bạn một cách chính xác, sau khi bạn chạy lệnh chèn, bảng của bạn trông như thế này

1   225
2   494
3   589
4   230
2   494

Nếu vậy, thì câu trả lời là vì thiết kế bảng của bạn cho phép trùng lặp.

Nếu bạn muốn nó ngăn bản ghi thứ hai được chèn, bạn sẽ cần xác định cột A_ID là khóa chính hoặc chỉ mục duy nhất. Nếu bạn làm như vậy, thì câu lệnh bỏ qua chèn sẽ hoạt động như bạn mong đợi, tức là chèn các bản ghi, bỏ qua các lỗi như cố gắng thêm một bản ghi trùng lặp.

Đã trả lời ngày 14 tháng 6 năm 2010 lúc 6:40Jun 14, 2010 at 6:40

Pdwalkerpdwalkerpdwalker

8037 Huy hiệu bạc8 Huy hiệu Đồng7 silver badges8 bronze badges

Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng câu lệnh MySQL

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8 để chèn dữ liệu vào bảng.: in this tutorial, you will learn how to use the MySQL
INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8 statement to insert data into a table.

Giới thiệu về tuyên bố của MySQL INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494') 8

Khi bạn sử dụng câu lệnh

alter table MYTABLE add primary key (a_id,b_id)
0 để thêm nhiều hàng vào bảng và nếu xảy ra lỗi trong quá trình xử lý, MySQL sẽ chấm dứt câu lệnh & nbsp; và trả về lỗi. Kết quả là, không có hàng nào được chèn vào bảng.

Tuy nhiên, nếu bạn sử dụng câu lệnh

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8, các hàng có dữ liệu không hợp lệ gây ra lỗi bị bỏ qua và các hàng có dữ liệu hợp lệ được chèn vào bảng.

Cú pháp của câu lệnh

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8 như sau:

INSERT IGNORE INTO table(column_list) VALUES( value_list), ( value_list), ...

Code language: SQL (Structured Query Language) (sql)

Lưu ý rằng mệnh đề

alter table MYTABLE add primary key (a_id,b_id)
3 là một phần mở rộng của MySQL so với tiêu chuẩn SQL.

Ví dụ MySQL INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494') 8

Chúng tôi sẽ tạo một bảng mới gọi là

alter table MYTABLE add primary key (a_id,b_id)
5 cho cuộc biểu tình.

CREATE TABLE subscribers ( id INT PRIMARY KEY AUTO_INCREMENT, email VARCHAR(50) NOT NULL UNIQUE );

Code language: SQL (Structured Query Language) (sql)

Hạn chế

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
6 đảm bảo rằng không có email trùng lặp tồn tại trong cột
alter table MYTABLE add primary key (a_id,b_id)
7.

Câu lệnh sau đây chèn một hàng mới vào bảng & nbsp; ________ 25:

INSERT INTO subscribers(email) VALUES('');

Code language: SQL (Structured Query Language) (sql)

Nó hoạt động như mong đợi.

Hãy để thực hiện một câu lệnh khác chèn hai hàng vào bảng & nbsp; ________ 25:

INSERT INTO subscribers(email) VALUES(''), ('');

Code language: SQL (Structured Query Language) (sql)

Nó trả về một lỗi.

Error Code: 1062. Duplicate entry '' for key 'email'

Code language: SQL (Structured Query Language) (sql)

Như đã nêu trong thông báo lỗi, email ____ 30 & nbsp; vi phạm & nbsp; ràng buộc

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
6.

Tuy nhiên, nếu bạn sử dụng câu lệnh

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8 thay thế.

INSERT IGNORE INTO subscribers(email) VALUES(''), ('');

Code language: SQL (Structured Query Language) (sql)

MySQL đã trả lại một tin nhắn cho biết một hàng đã được chèn và hàng kia đã bị bỏ qua.

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
0

Để tìm chi tiết của cảnh báo, bạn có thể sử dụng lệnh

1   225
2   494
3   589
4   230
2   494
3 như được hiển thị bên dưới:

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
1in Kết luận, khi bạn sử dụng câu lệnh
INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8, thay vì đưa ra lỗi, MySQL đã đưa ra cảnh báo trong trường hợp xảy ra lỗi.
Hướng dẫn insert ignore mysql not working - chèn bỏ qua mysql không hoạt động

In conclusion, when you use the

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8 statement, instead of issuing an error, MySQL issued a warning in case an error occurs.

Nếu bạn truy vấn dữ liệu từ bảng

alter table MYTABLE add primary key (a_id,b_id)
5, bạn sẽ thấy rằng chỉ có một hàng thực sự được chèn và hàng mà & nbsp; gây ra lỗi là không.

Hướng dẫn insert ignore mysql not working - chèn bỏ qua mysql không hoạt động

MySQL INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494') 8 và ________ 37 & nbsp;

Khi chế độ nghiêm ngặt được bật, MySQL trả về lỗi và hủy bỏ câu lệnh

alter table MYTABLE add primary key (a_id,b_id)
0 nếu bạn cố gắng chèn các giá trị không hợp lệ vào bảng.

Tuy nhiên, nếu bạn sử dụng câu lệnh

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8, MySQL sẽ đưa ra cảnh báo thay vì lỗi. Ngoài ra, nó sẽ cố gắng điều chỉnh các giá trị để làm cho chúng hợp lệ trước khi thêm giá trị vào bảng.

Xem xét các ví dụ sau.

Đầu tiên, chúng tôi tạo một bảng mới có tên

INSERT IGNORE INTO table(column_list) VALUES( value_list), ( value_list), ...

Code language: SQL (Structured Query Language) (sql)
0:

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
2

Trong bảng này, cột

INSERT IGNORE INTO table(column_list) VALUES( value_list), ( value_list), ...

Code language: SQL (Structured Query Language) (sql)
1 chỉ chấp nhận chuỗi có độ dài & nbsp; nhỏ hơn hoặc bằng sáu.

Thứ hai, chèn một chuỗi có chiều dài là bảy vào bảng

INSERT IGNORE INTO table(column_list) VALUES( value_list), ( value_list), ...

Code language: SQL (Structured Query Language) (sql)
0.

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
3

MySQL đã phát hành lỗi sau vì chế độ nghiêm ngặt được bật.

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
4

Thứ ba, sử dụng câu lệnh

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8 để chèn cùng một chuỗi.

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
5

MySQL đã cắt dữ liệu trước khi chèn nó vào bảng

INSERT IGNORE INTO table(column_list) VALUES( value_list), ( value_list), ...

Code language: SQL (Structured Query Language) (sql)
0. Ngoài ra, nó đưa ra một cảnh báo.

Hướng dẫn insert ignore mysql not working - chèn bỏ qua mysql không hoạt động

Trong hướng dẫn này, bạn đã học được cách sử dụng câu lệnh MySQL

INSERT IGNORE INTO table_name (a_id, b_id) VALUES ('4', '230') ('2', '494')
8 để chèn các hàng vào bảng và bỏ qua lỗi cho các hàng gây ra lỗi.

Hướng dẫn này có hữu ích không?

Làm thế nào để chèn bỏ qua hoạt động trong mysql?

Nếu bạn sử dụng công cụ sửa đổi bỏ qua, các lỗi không thể bỏ qua xảy ra trong khi thực thi câu lệnh chèn sẽ bị bỏ qua. Ví dụ, không bỏ qua, một hàng nhân đôi chỉ mục duy nhất hoặc giá trị khóa chính hiện có trong bảng gây ra lỗi khóa trùng lặp và câu lệnh bị hủy bỏ.ignorable errors that occur while executing the INSERT statement are ignored. For example, without IGNORE , a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the statement is aborted.

Chèn có bỏ qua nhanh hơn chèn không?

TL; DR: Chèn một số lượng lớn các hàng không có va chạm nhanh hơn (không) đặt lại cùng một hàng, cả hai đều sử dụng cú pháp chèn.Inserting a large number of rows with no collisions is MUCH faster than (not) re-inserting the same rows, BOTH using the INSERT IGNORE syntax.

Tôi có nên sử dụng chèn bỏ qua không?

Việc chèn các lệnh bỏ qua và thay thế nên được chọn theo hành vi xử lý trùng lặp mà bạn muốn thực hiện.Lệnh chèn chèn bỏ qua bộ đầu tiên của các bản ghi trùng lặp và loại bỏ phần còn lại.Lệnh thay thế giữ cho tập hợp các bản sao cuối cùng và xóa bất kỳ lệnh nào trước đó.should be chosen as per the duplicate-handling behavior you want to effect. The INSERT IGNORE command keeps the first set of the duplicated records and discards the remaining. The REPLACE command keeps the last set of duplicates and erases out any earlier ones.

Làm cách nào để bỏ qua các mục trùng lặp trong mysql?

Nếu chúng tôi sử dụng câu lệnh INSERT để thêm dữ liệu với các hàng trùng lặp, MySQL sẽ ném 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 tôi 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.