mysqladmin -uroot create foo
如果存在则返回退出状态 1 foo
,否则返回 0,但如果数据库不存在,它当然也会创建数据库。有没有简单的方法可以简单地检查数据库是否存在?
答案1
我意识到这个问题很久以前就已经被回答过了,但是对我来说这样做似乎更清楚:
mysql -u root -e 'use mydbname'
如果数据库存在,则不会产生任何输出并以 returncode == 0 退出。
如果数据库才不是存在,这将产生一个错误消息标准错误并以 returncode == 1 退出。因此,您可以执行以下操作:
if ! mysql -u root -e 'use mydbname'; then
...do stuff to create database...
fi
它可以与 shell 脚本很好地运行,不需要对输出进行任何处理,也不依赖于本地文件系统访问。
答案2
mysql -e "SHOW DATABASES LIKE 'foo'"
应该可以帮助你。
答案3
MySQL 中的数据库是文件系统中的文件夹。这使得查找数据库是否存在变得非常容易:
test -d "/var/lib/mysql/databasename"
在本例中,/var/lib
是 MySQL 的数据目录。此代码片段的优点在于它不需要运行 MySQL 守护程序,也不需要凭据。当然,运行该命令的用户必须被允许进入该目录。
答案4
有点不寻常,但是如果 foo 不存在则打印 1,否则打印 0:
mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'