我有一个MariaDB(mysql)数据库,其中包含一个如下所示的表:
MariaDB [DevicesPool]> show columns from Dirs_and_Names;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| LNR | int(11) | NO | PRI | NULL | auto_increment |
| D_Nr | varchar(2) | NO | | NULL | |
| Filename | varchar(100) | NO | | NULL | |
| Path_and_File | varchar(250) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
4 rows in set (0.000 sec)
背景:在这个表中存储了我所有的视频文件,从不同的设备收集。我的目的是收集这个表中的视频文件移动到另一个存储设备,或删除它,包括删除或更改表中的记录。我的想法是收集一组视频文件在一个(临时)列表,然后开始一个批处理。
但首先我做了一些基本的测试转发参数,这不成功.
首先,我使用batch将一个数字放入一个字符串(id)中,该字符串包含,例如218。
然后我想用mysql -e命令来显示一个记录,以选择或删除LNR包含我先前在批处理中分配的id的记录。
如下所示(引号中的$id):
id=218; mysql -uuser -psecret -e 'use DevicesPool; SELECT * FROM Dirs_and_Files WHERE LNR="$id";'
查询没有给出任何结果,尽管在mysql环境中存在该记录。
MariaDB [DevicesPool]> SELECT * FROM Verz_und_Namen WHERE LNR=218;
+-------+------+------------------+----------------------------------------------------+
| LNR | F_Nr | Fileiname | Path_and_File |
+-------+------+------------------+----------------------------------------------------+
| 218 | 01 | King_Kong.mp4 | /home/user/Movies/King_Kong.mp4 |
+-------+------+------------------+----------------------------------------------------+
1 row in set (0.001 sec)
当我执行这个($id没有引号):
id=218; mysql -uuser -psecret -e 'use DevicesPool; SELECT * FROM Dirs_and_Names WHERE LNR=$id;'
然后我收到一个错误:
ERROR 1054 (42S22) at line 1: Unknown column '$id' in 'where clause'
所以,我的问题是:
我如何使用批处理外部变量(字符串?)作为参数在mysql -e命令?确切地说,我如何选择或删除一个记录与外部分配的id?
先谢谢你了。
- Linux操作系统
2条答案
按热度按时间q8l4jmvw1#
单引号是您的问题
vxf3dgd42#
分号“之后;“除非您使用
另请注意SQL语句前后的双引号,以便pash替换变量。