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
'programing' 카테고리의 다른 글
| 스크립트가 로드된 후 javascript 함수 호출 (0) | 2023.10.20 |
|---|---|
| C11의 최신 변경 사항 (0) | 2023.10.20 |
| Spring GenericFilter Bean의 예외 처리 (0) | 2023.10.15 |
| 플랫폼 간 일관된 의사 난수 (0) | 2023.10.15 |
| jQuery애니메이션 스크롤 (0) | 2023.10.15 |