除了我关于csv import的最佳解决方案的问题 我搜索验证方法,我只使用msyql获得合格的错误。 简短说明:
我通过LOAD DATA INFILE将数据导入临时表,然后我需要验证这些数据。
最好的方法是选择几个过滤器,如:
SELECT * from temp_table WHERE col1 not in (1,2) OR col2 REGEXP '[0-9]+' etc.
也可以。但我想知道最快的方法来保存列为什么找到行,也许有案例和反击ort ......相似?
这样我就可以返回一个合格的错误,例如:“列x只能包含y”
答案 0 :(得分:1)
您可以在从CSV文件加载数据之前在temp_table上设置触发器。
触发器会在永久表中插入一行(如果它通过验证),如果没有,则插入到错误表中。这样的事情应该有效。
DELIMITER //
CREATE TRIGGER validating_insert
AFTER INSERT ON temp_table FOR EACH ROW
BEGIN
IF col1 NOT IN (1,2) OR col2 REGEXP '[0-9]+' THEN
INSERT INTO permanent_table VALUES (NEW.col1, NEW.col2);
ELSE
INSERT INTO error_table VALUES (NEW.col1, NEW.col2, 'any reason goes here');
END IF;
END//