Estoy intentando escribir un script que permita al usuario seleccionar qué manipulación necesita realizar en una mesa. Quiero comprobar si la tabla existe o no. Si existe continuaré con las demás cosas o salgo diciendo que la tabla no existe. ¿Cómo podría lograr esto?
Respuesta1
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
para omitir nombres de columnas-s
para salida no tabular
Respuesta2
En MySQL puedes usar -e desde el shell
mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?
Respuesta3
Si desea un método que no implique ejecutar un cliente mysql e iniciar sesión en el servidor mysql, puede hacer esto:
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
Tendrá que reemplazar la ruta a su directorio de datos, el nombre de su base de datos y el nombre de su tabla en la primera línea.
Advertencias:
- Esto no funcionará si está utilizando InnoDB y nonousando innodb-file-per-table. es decir, el script puede decir que la tabla no existe aunque sí exista.
- Es posible que ese archivo exista por varias razones, incluida la copia de tablas usando el sistema de archivos o el cambio de MyISAM a InnoDB. es decir, el script puede decir que la tabla existe aunque no sea así.
No es tan confiable como los otros métodos presentados ya por las razones anteriores, pero evita el cliente mysql, por lo que aún puede valer la pena.
Tenga en cuenta que todos los métodos presentados aquí dependen de que usted obtenga sus propios permisos (sistema de archivos o MySQL) correctos. Si se equivoca, lo más probable es que obtenga un falso negativo.