从外壳脚本中,如何检查MySQL数据库中的表是否存在?


8

我正在尝试编写一个脚本,该脚本允许用户选择他需要在表上进行哪些操作。我想检查表是否存在。如果存在,我将继续其他操作,否则退出并说表不存在。我将如何实现这一目标。

Answers:


12
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而不停止并提示您输入密码,可以.my.cnf在主目录中创建一个文件,并添加一个[client]包含的块password="my_password"。请查看手册中有关用户选项文件的部分。
Ladadadada

4

在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

您将必须在第一行中替换数据目录的路径,数据库名称和表名称。

注意事项:

  1. 如果您使用的是InnoDB并且使用innodb-file-per-table ,则此方法将无效。即脚本可以说该表不存在,即使存在。
  2. 该文件可能由于各种原因而存在,包括使用文件系统复制表或从MyISAM切换到InnoDB。即脚本可以说该表确实存在,即使它不存在。

由于上述原因,它不如已经介绍的其他方法可靠,但是它避免了mysql客户端,因此仍然值得。

请注意,此处介绍的所有方法都取决于您是否正确获得了自己的权限(文件系统或MySQL)。如果您弄错了它们,您很可能会得到假阴性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.