mysql - 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”是表名而不是列。我做错了什么?我发现了很多使用这种方法的例子,但我不知道为什么对我来说它不起作用。
解决方案
命令:
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>
推荐阅读
- javascript - 客户端验证然后传递到服务器或禁用提交直到表单完成 - 我该怎么做?
- elasticsearch - etup 弹性网络流模块
- c# - 我在 3 个点之间有一个平面,并希望获得一个转换矩阵,该矩阵允许将平面中的其他点转换为 2D 坐标
- omnet++ - Omnet++:如何在 omnetpp 使用 iperf 工具?
- python - 如何使用外部库?
- laravel - Laravel 用户地址场景 - HasMany
- r - 如何用分开的数据绘制一条连续的线
- javascript - 使用 useState 隐藏/显示 div?
- python - statsmodel 的 r2 显示 NaN
- linux - 如何从源代码构建 libcurl-gnutls.so