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

Lọc đầu vào rỗng hoặc trống bằng cách sử dụng LOAD DATA INFILE trong MySQL

Tôi sẽ thực hiện việc này bằng cách lọc tệp với grep hoặc awk và sau đó chuyển nó vào MySQL (thông qua /dev/stdin ). Một cái gì đó như thế này:

cat your_file.txt |
  awk '/\t.+/' |
    mysql -u your_username -pyour_password \
      -e "LOAD DATA LOCAL INFILE '/dev/stdin' \
          IGNORE INTO TABLE tablename         \
          COLUMNS TERMINATED BY '\t'          \
          LINES TERMINATED BY '\n'            \
          (col1, col2);" \
      your_database_name

Biểu thức chính quy được cung cấp cho awk trên dòng thứ hai chỉ khớp với bất kỳ dòng nào có ký tự tab theo sau là một hoặc nhiều ký tự bất kỳ. Bạn có thể muốn điều chỉnh nó để phù hợp với nhu cầu của mình.

Chỉnh sửa: Một khả năng khác đã xảy ra với tôi. Bạn có thể sử dụng SET để đặt một số giá trị ma thuật trên các cột trống và đặt BEFORE INSERT kích hoạt trên bảng sẽ bảo lưu trên một hàng khi nó nhìn thấy giá trị đó. Tôi không có nhiều kinh nghiệm với các trình kích hoạt nhưng tôi nghĩ những thứ như thế này sẽ hoạt động:

CREATE TRIGGER skip_magic_rows
  BEFORE INSERT ON tablename
  FOR EACH ROW
  BEGIN
    IF NEW.col2 = 'IDSPISPOPD4815162342' THEN  # Some unlikely magic string
      # Trigger an error, which will cause the INSERT to fail†

      # If you have MySQL < 5.5 this is kludgy -- see Note 1
      DROP TABLE `Skipped row`

      # OR

      # In MySQL >= 5.5 you can send a signal--'45000' is a generic error
      SIGNAL SQLSTATE '45000' SET message_text = 'Skipped row';  # See Note 2

    END IF
  END
;

†: Theo tài liệu :

Sau đó ...

LOAD DATA LOCAL INFILE 'file' 
  IGNORE INTO TABLE tablename 
  COLUMNS TERMINATED BY '\t' 
  LINES TERMINATED BY '\n'
  (col1, @var2)
  SET col2 = IF(@var2 IN (NULL, ''), 'IDSPISPOPD4815162342', @var2)
;

Hy vọng nó hữu ích!

Lưu ý 1: Nhận xét và bài đăng trên blog có liên quan
Lưu ý 2: Chuỗi SO có liên quan




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cài đặt MySQL Workbench trên Windows

  2. Thiết kế cơ sở dữ liệu:3 loại người dùng, riêng biệt hay một bảng?

  3. Thay đổi mã từ MySQL sang PDO

  4. Chọn phòng trống giữa hai ngày

  5. Java.lang.IllegalStateException:Đã được đính kèm