首页 > 解决方案 > Shell脚本从外部文件执行mysql过程,带有命令行参数

问题描述

我有一个 sh 脚本,我在其中连接到 mysql 并尝试执行保存在本地文件中的存储过程。

tblName="table${k}"
mysql -h 10.0.0.1 --user=username --password=password 
      -e "use db_test; set @tableName=${tblName}; source query.sql;"

和文件 query.sql:

set @str = concat('create table ', @tableName, ' (
 id int not null,
 ....
);');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;

mysql 命令在一个 for 循环中,“k”是一个索引。我想创建一个名称取自 tableName 变量的表。问题是我收到一个错误:

ERROR 1054 (42S22) at line 1: Unknown column 'table1' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table2' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table3' in 'field list'
...

我有点困惑,因为“table1”是表名而不是列。我做错了什么?我发现了很多使用这种方法的例子,但我不知道为什么对我来说它不起作用。

标签: mysqllinuxsh

解决方案


命令:

set @tableName=${tblName}

要求表名包含在 '' 中。

要修复:

set @tableName='${tblName}'

在 MySQL shell 中对此进行测试显示了问题:

mysql> set @tableName=table1;
ERROR 1054 (42S22): Unknown column 'table1' in 'field list'
mysql> set @tableName='table1';
Query OK, 0 rows affected (0.00 sec)

mysql>

推荐阅读