2010-04-30 29 views
9

Trong MySQL tôi đã sử dụng LOAD DATA LOCAL INFILE hoạt động tốt. Cuối cùng, tôi nhận được một thông báo như:MYSQL: Hiển thị bản ghi bị bỏ qua sau khi LOAD DATA INFILE?

Records: 460377 Deleted: 0 Skipped: 145280 Warnings: 0 

Làm cách nào tôi có thể xem số lượng bản ghi bị bỏ qua? SHOW warnings không hoạt động:

mysql> show warnings; 
Empty set (0.00 sec) 
+0

Trong trường hợp của tôi, các hàng bị thiếu là do khai báo khóa chính bị nhầm lẫn (tôi có hàng trùng lặp), cũng như thiếu bộ định danh 'null' cho một số trường trong bảng (đôi khi trống trong lần nhập của tôi). Sửa lược đồ bảng đã giải quyết được vấn đề về bản ghi bị thiếu của tôi. – patricksurry

Trả lời

4

Bạn có thể tạo bảng tạm thời loại bỏ các mục khóa chính sao cho nó trùng lặp, sau đó chèn dữ liệu.

Xây dựng một câu lệnh SQL như

select count(column_with_duplicates) AS num_duplicates,column_with_duplicates 
from table 
group by column_with_duplicates 
having num_duplicates > 1; 

này sẽ cho bạn thấy các hàng với dư thừa. Một cách khác là chỉ cần loại bỏ các hàng đã thực sự được chèn vào bảng và chạy lệnh khác biệt của tệp đối với bản gốc để xem những hàng nào không được bao gồm.

3

Đối với bất cứ ai tình cờ lên như thế này:

Một lựa chọn khác sẽ được làm một SELECT INTO và diff hai tập tin. Ví dụ:

LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE my_table FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r' IGNORE 1 LINES (title, desc, is_viewable); 

SELECT title, desc, is_viewable INTO OUTFILE 'data_rows.txt' FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r' FROM my_table; 

Sau đó thực thi FileMerge (trên Mac OS X) data.txt data_rows.txt để xem sự khác biệt. Nếu bạn gặp phải lỗi truy cập bị từ chối khi thực hiện SELECT INTO, hãy đảm bảo rằng bạn:

GRANT FILE ON *.* TO 'mysql_user'@'localhost'; 
flush privileges; 

Là người dùng root trong ứng dụng mysql.

+1

Không chắc chắn tại sao bỏ phiếu xuống. Đây chỉ là một cách tiếp cận thay thế đã giúp tôi. –

7

Nếu không có cảnh báo, nhưng một số hàng bị bỏ qua, có nghĩa là khóa chính đã được sao chép cho các hàng bị bỏ qua.

Cách dễ nhất để tìm ra trùng lặp là bằng cách mở tệp cục bộ trong excel và thực hiện xóa trùng lặp trên cột khóa chính để xem có bất kỳ tệp nào không.

1

Bản ghi sẽ bị bỏ qua, khi không gặp phải bất kỳ ràng buộc cơ sở dữ liệu nào. Kiểm tra các từ thông dụng như

  • trùng lặp Tiểu học trọng điểm
  • điều kiện then chốt Unique
  • tình trạng phân vùng
1

tôi sử dụng bash dòng lệnh để tìm hàng trùng lặp trong file csv:

awk -F\, '{print $1$2}' /my/source/file.csv| sort -n| uniq -c| grep -v "^\ *1" 

khi hai cột đầu tiên là khóa chính.

Các vấn đề liên quan