gorm 执行删除 db 语句后无法重新创建

1. 运行环境

go 版本 : go version go1.17.2 darwin/amd64
mysql 版本 : 5.6.51
gorm 版本 : v1.22.5

2. 问题描述?

按照教程中的方法,进行 mysql db 的删除和重新创建

func deleteMysqlDatabase() error {
    dbname := CurrentDatabase()
    sql := fmt.Sprintf("DROP DATABASE %s;", dbname)
    if err := DB.Exec(sql).Error; err != nil {
        return err
    }
    sql = fmt.Sprintf("CREATE DATABASE %s;", dbname)
    // SQLDB.Exec(sql)

    if err := DB.Exec(sql).Error; err != nil {
        return err
    }

    sql = fmt.Sprintf("USE %s;", dbname)
    // SQLDB.Exec(sql)
    if err := DB.Exec(sql).Error; err != nil {
        return err
    }
    return nil
}

3. 您期望得到的结果?

期望的结果应该是跟教程里结果一样, DB重新删除然后创建,达到数据表全部删除的结果

4. 您实际得到的结果?

但我在实际执行过程中,遇到了 Unknown database 'gohub' 的错误

2022-01-27 23:29:33     DEBUG   mysql/migrator.go:234   Database Query  {"sql": "SELECT DATABASE()", "time": "7.211ms", "rows": -1}
2022-01-27 23:29:33     DEBUG   mysql/migrator.go:237   Database Query  {"sql": "SELECT SCHEMA_NAME from Information_schema.SCHEMATA where SCHEMA_NAME LIKE 'gohub%' ORDER BY SCHEMA_NAME='gohub' DESC limit 1", "time": "10.293ms", "rows": 1}
2022-01-27 23:29:33     DEBUG   migrate/migrator.go:48  Database Query  {"sql": "SELECT count(*) FROM information_schema.tables WHERE table_schema = 'gohub' AND table_name = 'migrations' AND table_type = 'BASE TABLE'", "time": "9.683ms", "rows": -1}
2022-01-27 23:29:33     DEBUG   mysql/migrator.go:234   Database Query  {"sql": "SELECT DATABASE()", "time": "5.028ms", "rows": -1}
2022-01-27 23:29:33     DEBUG   mysql/migrator.go:237   Database Query  {"sql": "SELECT SCHEMA_NAME from Information_schema.SCHEMATA where SCHEMA_NAME LIKE 'gohub%' ORDER BY SCHEMA_NAME='gohub' DESC limit 1", "time": "9.811ms", "rows": 1}
2022-01-27 23:29:33     DEBUG   mysql/migrator.go:234   Database Query  {"sql": "SELECT DATABASE()", "time": "8.330ms", "rows": -1}
2022-01-27 23:29:33     DEBUG   mysql/migrator.go:237   Database Query  {"sql": "SELECT SCHEMA_NAME from Information_schema.SCHEMATA where SCHEMA_NAME LIKE 'gohub%' ORDER BY SCHEMA_NAME='gohub' DESC limit 1", "time": "9.632ms", "rows": 1}
2022-01-27 23:29:33     DEBUG   database/database.go:65 Database Query  {"sql": "DROP DATABASE gohub;", "time": "41.058ms", "rows": 2}
2022-01-27 23:29:33     ERROR   database/database.go:71 Database Error  {"sql": "CREATE DATABASE gohub;", "time": "5.703ms", "rows": 0, "error": "Error 1049: Unknown database 'gohub'"}
gohub/pkg/database.deleteMysqlDatabase
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/pkg/database/database.go:71
gohub/pkg/database.DeleteAllTables
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/pkg/database/database.go:43
gohub/pkg/migrate.(*Migrator).Fresh
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/pkg/migrate/migrator.go:220
gohub/app/cmd.runFresh
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/app/cmd/migrate.go:82
github.com/spf13/cobra.(*Command).execute
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/vendor/github.com/spf13/cobra/command.go:860
github.com/spf13/cobra.(*Command).ExecuteC
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/vendor/github.com/spf13/cobra/command.go:974
github.com/spf13/cobra.(*Command).Execute
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/vendor/github.com/spf13/cobra/command.go:902
main.main
        /Users/lichmaker/go/src/github.com/lichmaker/gohub/main.go:56
runtime.main
        /usr/local/Cellar/go/1.17.2/libexec/src/runtime/proc.go:255
2022-01-27 23:29:33     DEBUG   database/database.go:71 Database Query  {"sql": "CREATE DATABASE gohub;", "time": "5.703ms", "rows": 0, "error": "Error 1049: Unknown database 'gohub'"}
Error 1049: Unknown database 'gohub'
exit status 1

我的理解是, 因为 DB 实际上是 *gorm.DB ,这里面的连接池是直接连接了 gohub ,所以在 db 删除后,连接池已经失效,所以无法执行 db 创建。
我直接使用 SQLDB*sql.DB 来执行sql,是可以执行成功的。 所以应该是 gorm 的某个问题?

求大神解答。

Summer
最佳答案

已经修复,请查看最新修改的文章 13.7. migrate fresh 命令

2年前 评论
讨论数量: 2

我也是遇到了这样的问题,删除数据库的语句可以正常执行,创建数据库的语句就报 Unknown database ‘xxxx’,即便是使用*sql.DB也是报同样的错误
go 版本 : go version go1.17.2 darwin/amd64
mysql 版本 : 5.7.28
gorm 版本 : v1.22.5

2年前 评论
Summer

已经修复,请查看最新修改的文章 13.7. migrate fresh 命令

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!