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
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
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
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']
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
INSERT IGNORE INTO table_name [a_id, b_id] VALUES ['4', '230'] ['2', '494']
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:Code language: SQL [Structured Query Language] [sql]
INSERT IGNORE INTO table[column_list] VALUES[ value_list], [ value_list], ...
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
INSERT IGNORE INTO table_name [a_id, b_id] VALUES ['4', '230'] ['2', '494']
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.Code language: SQL [Structured Query Language] [sql]
CREATE TABLE subscribers [ id INT PRIMARY KEY AUTO_INCREMENT, email VARCHAR[50] NOT NULL UNIQUE ];
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:
Code language: SQL [Structured Query Language] [sql]
INSERT INTO subscribers[email] VALUES[''];
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:
Code language: SQL [Structured Query Language] [sql]
INSERT INTO subscribers[email] VALUES[''], [''];
Nó trả về một lỗi.
Code language: SQL [Structured Query Language] [sql]
Error Code: 1062. Duplicate entry '' for key 'email'
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ế.Code language: SQL [Structured Query Language] [sql]
INSERT IGNORE INTO subscribers[email] VALUES[''], [''];
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.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.MySQL INSERT IGNORE INTO table_name [a_id, b_id] VALUES ['4', '230'] ['2', '494']
8 và ________ 37 & nbsp;
INSERT IGNORE INTO table_name [a_id, b_id] VALUES ['4', '230'] ['2', '494']
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
0:Code language: SQL [Structured Query Language] [sql]
INSERT IGNORE INTO table[column_list] VALUES[ value_list], [ value_list], ...
INSERT IGNORE INTO table_name [a_id, b_id] VALUES ['4', '230'] ['2', '494']
2Trong bảng này, cột
1 chỉ chấp nhận chuỗi có độ dài & nbsp; nhỏ hơn hoặc bằng sáu.Code language: SQL [Structured Query Language] [sql]
INSERT IGNORE INTO table[column_list] VALUES[ value_list], [ value_list], ...
Thứ hai, chèn một chuỗi có chiều dài là bảy vào bảng
0.Code language: SQL [Structured Query Language] [sql]
INSERT IGNORE INTO table[column_list] VALUES[ value_list], [ value_list], ...
INSERT IGNORE INTO table_name [a_id, b_id] VALUES ['4', '230'] ['2', '494']
3MySQL đã 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']
4Thứ 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']
5MySQL đã cắt dữ liệu trước khi chèn nó vào bảng
0. Ngoài ra, nó đưa ra một cảnh báo.Code language: SQL [Structured Query Language] [sql]
INSERT IGNORE INTO table[column_list] VALUES[ value_list], [ value_list], ...
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?