Có, bạn có thể thực hiện một vài bước sau:
Đầu tiên Tạo một bảng dàn tạm thời (hãy gọi nó là import
) với một cột sẽ giữ các dòng dưới dạng các hàng của tệp dữ liệu nguồn
CREATE TABLE `import` (
`line` varchar(512) DEFAULT NULL
);
và tải dữ liệu từ tệp vào bảng
LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES TERMINATED BY '\n'
Thứ hai Giả sử rằng bạn có một bảng đích (hãy gọi nó là words
) trông giống như thế này
CREATE TABLE `words` (
`word` varchar(64) DEFAULT NULL
);
chúng ta có thể tách từng dòng thành các từ và chèn chúng vào words
bảng với một truy vấn
INSERT INTO words (word)
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(line, ' ', n.n), ' ', -1) word
FROM import CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(line) - LENGTH(REPLACE(line, ' ', '')))
ORDER BY n.n
LƯU Ý:
- giả định là các từ của bạn được phân tách chính xác bằng một dấu cách
- truy vấn này sẽ chia ra tối đa 100 từ. Nếu cần nhiều hơn hoặc ít hơn, bạn có thể điều chỉnh giới hạn bằng cách chỉnh sửa truy vấn con bên trong hoặc nếu nhập thường xuyên thay vì cân nhắc sử dụng bảng (số) kiểm đếm liên tục để thay thế.
Thứ ba Thả hoặc cắt bớt (nếu bạn sẽ sử dụng lại nó để nhập nhiều tệp hơn) bảng dàn
DROP TABLE import;
Đây là SQLFiddle bản trình diễn hiển thị bước hai.