在存储过程中使用 LOAD DATA INFILE 命令

问题描述 投票:0回答:2

这可能吗?我在一些网站上读到,不能在程序中使用 LOAD DATA 命令。

mysql file-io load
2个回答
6
投票

不,我想由于安全原因这是不可能的。但是,您可以使用此技巧为数据库中的表生成“LOAD DATA”查询(为每个表返回一系列查询:在加载数据之前截断表,然后禁用键,然后加载数据,然后启用键):

SELECT CONCAT('TRUNCATE TABLE ',table_name,'; ALTER TABLE ',table_name,' DISABLE KEYS;    LOAD DATA INFILE "',table_name,'.txt" INTO TABLE ',table_name,' FIELDS TERMINATED BY "\\t" LINES TERMINATED BY "\\n"; ALTER TABLE ',table_name,' ENABLE KEYS; ')
FROM information_schema.`TABLES` as infs
WHERE infs.`TABLE_SCHEMA`=DATABASE()
AND infs.`TABLE_TYPE`!='VIEW';

运行此查询后,结果行是用于传输数据的查询。我在将完整数据库内容移动到另一个数据库时使用它。当然,在该查询中,您可以使用更多条件过滤所需的表。希望有帮助。


0
投票

这很有趣,但并不能解决我的问题。我想要加载到数据库中的文件是保存在目录中的 csv 文件,例如: 'C:/ProgramData/MySQL/MySQL Server 8.0/Data/finance/[文件名].csv,其中文件名是变量。我需要将 [filename] 作为 LOAD INFILE 文件中的参数传递。关于如何做到这一点有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.