programing

Linux Bash to mysql: 외부 값이 있는 레코드 선택 또는 삭제

elecom 2023. 10. 15. 17:00
반응형

Linux Bash to mysql: 외부 값이 있는 레코드 선택 또는 삭제

다음과 같은 테이블이 있는 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)

배경:이 표에는 여러 장치에서 수집한 모든 비디오 파일이 저장됩니다.제 목표는 이 테이블 내의 비디오 파일을 수집하여 다른 저장 장치로 이동하거나 테이블 내의 레코드를 삭제하거나 변경하는 것입니다.제 생각은 (임시) 목록에 있는 비디오 파일 그룹을 모아서 배치를 시작하는 것입니다.

하지만 우선 몇 가지 기본 테스트 포워딩 파라미터를 만들었지만 성공하지 못했습니다.

먼저 배치를 사용하여 218과 같은 문자열(id)에 숫자를 입력합니다.

그러면 이전에 일괄적으로 할당했던 id가 LNR에 포함된 레코드를 선택 또는 삭제하기 위해 mysql-e 명령어로 레코드를 보여주고 싶습니다.

이와 같은 것(따옴표 내 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'

자, 여기 제 질문이 있습니다.

배치 외부 변수(strings)를 mysql -e 명령 내의 매개 변수로 사용하려면 어떻게 해야 합니까?네, 외부에 할당된 ID의 레코드를 선택하거나 삭제하려면 어떻게 해야 하나요?

미리 감사드립니다.

-Linux fluesterer

인용구 하나가 문제입니다.

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"

세미콜론 ";"을 사용하여 내보내지 않으면 변수가 사라집니다.

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

변수를 대체할 pash를 위해 SQL 문을 두드리는 큰따옴표도 참고하시기 바랍니다.

언급URL : https://stackoverflow.com/questions/64224018/linux-bash-to-mysql-select-or-delete-record-with-external-value

반응형