在文件名与表名不同的地方使用 mysqlimport

Posted

技术标签:

【中文标题】在文件名与表名不同的地方使用 mysqlimport【英文标题】:Using mysqlimport where the filename is different from the table name 【发布时间】:2011-01-31 07:14:19 【问题描述】:

我一直在使用 mysqlimport,但遇到了文件名必须与表名相同的限制。有没有办法解决这个问题?

我无法重命名该文件,因为它被其他进程使用,我不想复制该文件,因为其中会有很多,有些非常大。

我想使用 mysqlimport 而不是 LOAD INFILE。

编辑:不幸的是,这需要在 Windows 上运行,所以恐怕没有符号链接的技巧。

【问题讨论】:

为什么不想使用LOAD DATA INFILE,它与mysqlimport 的作用相同,并且它允许您为给定的输入文件指定不同的表名? 我正在使用 Java/JDBC 并且在某些情况下加载文件出现问题时调用 LOAD INFILE 似乎不会产生任何错误。如果您通过 Workbench 运行它,则会显示警告,但 JDBC 驱动程序没有返回任何信息。 mysqlimport 应该允许一个参数设置不同的表名,这是一个基本功能... 【参考方案1】:

假设您使用的是 Linux 系统,您是否尝试过使用 alias 命令?

【讨论】:

【参考方案2】:

只需创建一个符号链接:

ln -s /tmp/real_file.txt /tmp/your_table_name.txt

【讨论】:

【参考方案3】:

你没有说你在哪个平台上。在 unix 上,您可以创建指向文件的符号链接:

ln -s filename.txt tablename.txt

然后在 mysqlimport 命令中使用它。

但 mysqlimport 只是 LOAD INFILE 的命令行界面,因此您也可以在命令行上执行此操作:

mysql -e "load data infile 'filename' into table TBL_NAME" dbname

【讨论】:

您仍然可以在 Windows 上使用相同语法的 mysql.. 对文件进行符号链接有点奇怪。【参考方案4】:

mysqlimport 使用文件名来确定应该加载数据的表的名称。该程序通过剥离任何文件扩展名(最后一个句点及其后的任何内容)来做到这一点;然后将结果用作表名。例如,mysqlimport 将名为 City.txt 或 City.dat 的文件视为要加载到名为 City 的表中的输入。

【讨论】:

以上是关于在文件名与表名不同的地方使用 mysqlimport的主要内容,如果未能解决你的问题,请参考以下文章

表字段与表结构的操作区别

knex 查询与表名周围的引号

当名称与表名相同时,内联索引定义失败

MYSQL批量修改表前缀与表名sql语句

数据库与表的操作

MyBatisPlus:DQL编程控制(条件查询方式查询投影查询条件设定字段映射与表名映射)