나는 사용자가 테이블에서 수행해야 할 조작을 선택할 수 있는 스크립트를 작성하려고 합니다. 테이블이 존재하는지 확인하고 싶습니다. 존재하는 경우 다른 작업을 계속하거나 테이블이 존재하지 않는다고 종료합니다. 어떻게 하면 이것을 달성할 수 있을까요?
답변1
if [ $(mysql -N -s -u root -p -e \
"select count(*) from information_schema.tables where \
table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
do something
else
echo "table <table_name> does not exist"
exit 1
fi
-N
열 이름을 건너뛰려면-s
표 형식이 아닌 출력의 경우
답변2
MySQL에서는 쉘에서 -e를 사용할 수 있습니다
mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
답변3
mysql 클라이언트를 실행하고 mysql 서버에 로그인하지 않는 방법을 원할 경우 다음을 수행할 수 있습니다.
if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
echo Table exists
else
echo Table does not exist
fi
첫 번째 줄의 데이터 디렉터리 경로, 데이터베이스 이름 및 테이블 이름을 바꿔야 합니다.
주의사항:
- InnoDB를 사용하고 있고 다음과 같은 경우에는 작동하지 않습니다.~ 아니다innodb-file-per-table을 사용합니다. 즉, 스크립트는 테이블이 존재하더라도 존재하지 않는다고 말할 수 있습니다.
- 파일 시스템을 사용하여 테이블을 복사하거나 MyISAM에서 InnoDB로 전환하는 등 다양한 이유로 해당 파일이 존재할 수 있습니다. 즉, 스크립트는 테이블이 존재하지 않더라도 존재한다고 말할 수 있습니다.
위의 이유로 이미 제시된 다른 방법만큼 안정적이지는 않지만 mysql 클라이언트를 피하므로 여전히 가치가 있을 수 있습니다.
여기에 제시된 모든 방법은 사용자 자신의 권한(파일 시스템 또는 MySQL)이 올바른지 여부에 달려 있습니다. 잘못 입력하면 잘못된 음성 결과가 나올 가능성이 높습니다.