mariadb Linux Bash到mysql:选择或删除具有外部值的记录

du7egjpx  于 2022-11-08  发布在  Linux
关注(0)|答案(2)|浏览(141)

我有一个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操作系统
q8l4jmvw

q8l4jmvw1#

单引号是您的问题

id=218; mysql -uuser -psecret -e "use DevicesPool; SELECT * FROM Dirs_and_Names WHERE LNR=$id;"

# or

id=218; mysql -uuser -psecret -e 'use DevicesPool; SELECT * FROM Dirs_and_Names WHERE LNR='$id';'

# or

id=218 
query="SELECT * FROM Dirs_and_Names WHERE LNR=$id;"
mysql -uuser -psecret --database DevicesPool -e "$query"
vxf3dgd4

vxf3dgd42#

分号“之后;“除非您使用

export id=218; mysql -uuser -psecret -e "use DevicesPool; SELECT * FROM Dirs_and_Names WHERE LNR=$id;"

另请注意SQL语句前后的双引号,以便pash替换变量。

相关问题