从shell脚本中,我怎么检查MySQL数据库中的表是否存在?

我正在尝试编写一个脚本,允许用户select他需要在桌面上执行的操作。 我想检查表是否存在。 如果存在,我会继续其他的事情,否则我退出说表不存在。 我怎么能做到这一点。

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用于非表示输出

在MySQL中,你可以在shell中使用-e

 mysql -e "desc main_db.clients" > /dev/null 2>&1 echo $? 

如果你想要一个不涉及运行mysql客户端并login到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 

您必须在第一行中replace数据目录,数据库名称和表名的path。

注意事项:

  1. 如果您使用InnoDB并且使用innodb-file-per-table,这将不起作用。 即,脚本可以说表格即使存在也不存在。
  2. 这个文件可能因为各种原因而存在,包括使用文件系统复制表或者从MyISAM切换到InnoDB。 即脚本可以说,即使没有,表格也存在。

由于上述原因,它不像已经提供的其他方法那样可靠,但它避免了mysql客户端,所以它可能仍然是值得的。

请注意,这里介绍的所有方法都依赖于获取自己的权限(文件系统或MySQL)。 如果你弄错了,你很可能会得到一个错误的否定。