如何检查mysql数据库是否存在

350

在建立数据库连接后,有没有可能检查数据库(MySQL)是否存在。

我知道如何检查 DB 中是否存在表,但我需要检查 DB 是否存在。如果不存在,我必须调用另一段代码来创建并填充它。

我知道这听起来有点不太优雅 - 这只是一个快速而简单的应用程序。


1
我是一名初学者程序员。您能否详细说明为什么这样做会不优雅? - sequence
2
@sequence 如果你还没有得到答案,通常情况下,你不希望你的应用程序代码来管理数据库的定义。你的应用程序应该仅限于创建/读取/更新/删除(CRUD)操作。你应该有其他流程来管理数据库结构,并将其纳入你的集成/部署过程中。 - Jason
2
@sequence 如果你还没有得到答案,通常情况下,你不希望你的应用程序代码来管理数据库的定义。你的应用程序应该仅限于创建/读取/更新/删除(CRUD)操作。你应该有其他的流程来管理数据库的结构,将其纳入你的集成/部署流程中。 - undefined
25个回答

0

Golang解决方案

创建一个测试包并添加:

import "database/sql"

// testing database creation
func TestCreate(t *testing.T){
    Createdb("*Testdb") // This just calls the **sql.DB obect *Testdb 
    db,err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/*Testdb")
    if err != nil{
        panic(err)
    }
    defer db.Close()
    _, err = db.Exec("USE *Testdb")
    if err != nil{
        t.Error("Database not Created")
    }

} 

0

以下解决方案对我有效:

mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} \
-s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_DATABASE}'"

0
DB_EXISTS=$(mysql -h$DB_HOST -u$DB_USERNAME -p -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$DB_DATABASE'")


if [[ -z  "$DB_EXISTS" ]];
then 
    echo "DATABASE DOES NOT EXIST"
    exit;
else
    echo "DOES EXIST"
fi

0

当您没有足够的权限查看数据库时,使用INFORMATION_SCHEMAshow databases是不可靠的。当您无法访问数据库时,它会似乎不存在。然后创建将在此之后失败。另一种更精确的检查方法是使用use命令的输出,尽管我不知道这种方法有多可靠(文本输出在将来版本/其他语言中可能会更改...),所以请注意。

CHECK=$(mysql -sNe "use DB_NAME" 2>&1)
if [ $? -eq 0 ]; then
  # database exists and is accessible
elif [ ! -z "$(echo $CHECK | grep 'Unknown database')" ]; then
  # database does not exist
elif [ ! -z "$(echo $CHECK | grep 'Access denied')" ]; then
  # cannot tell if database exists (not enough permissions)"
else
  # unexpected output
fi

0
对于需要一个外壳解决方案的人来说,我最终选择的是
mysql -u$USER -p $DB -e ""

这将在给定的数据库上执行空查询。然后检查退出代码。
if [ $? -eq 0 ]; then
    echo "Database $DB exists"
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接