使用golang检查数据库表是不是存在

Posted

技术标签:

【中文标题】使用golang检查数据库表是不是存在【英文标题】:Check if database table exists using golang使用golang检查数据库表是否存在 【发布时间】:2019-07-06 14:33:26 【问题描述】:

我正在尝试做一个简单的事情,检查是否有表,如果没有则在数据库中创建该表。

这是我使用的逻辑。

    test := "June_2019"
    sql_query := `select * from ` + test + `;`

    read_err := db.QueryRow(sql_query, 5)
    error_returned := read_err.Scan(read_err)
    defer db.Close()

    if error_returned == nil 
        fmt.Println("table is there")

     else 
        fmt.Println("table not there")
    

在我的数据库中,我有 June_2019 表。但是这段代码仍然返回我not nil 值。我使用了db.QueryRow(sql_query, 5) 5,因为我的表中有五个列。

我在这里缺少什么?我还在学习golang。

提前致谢。

【问题讨论】:

离题;考虑一下从应用程序代码创建表是否合乎逻辑,因为您的 mysql 用户必须更强大,拥有 CREATE 和可能 DROP 权限,这可能是不安全的。还看到元数据(年份)用作表分隔符,为什么要这样做?理想情况下,您应该有一个表,其中有一个年份列 .. 因为 MySQL 可以在一个表中处理数百万甚至数十亿条记录,当涉及索引时,如果有疑问,部署 Partitioning 或多或少与您相同但在各方面都做得更好.. @RaymondNijland 是的。但在这里我这样做是为了学习golang 并满足一个简单的需求。 SQL 是一种语言。 go 是一种语言。在尝试解决问题时,最好使用最适合手头任务的语言。检查表是否存在应该留给 SQL 方面,例如CREATE TABLE IF NOT EXISTS 查看此答案以获取table existence 的 SQL 查询。 【参考方案1】:

我已经使用 golang 和 MySQL 解决了这个问题。

_, table_check := db.Query("select * from " + table + ";")

    if table_check == nil 
        fmt.Println("table is there")
     else 
        fmt.Println("table not there")
    

我使用了db.Query(),它返回值和错误,这里我只检查了error

我想大多数人都以为我想用 MySQL 的方式来做,我只是想学习如何使用 golang 来做 MySQL 操作。

【讨论】:

您忘记了 rows.Close() (第一个返回变量)以防 table_check == nil 并且可能会泄漏内存

以上是关于使用golang检查数据库表是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

检查访问数据库是不是存在表

如何使用 shell 脚本检查 MySQL 数据库中是不是存在表?

如何检查数据库中是不是存在表或列?

从 Excel VBA-检查访问表是不是存在/如果不存在,则创建/复制

如何使用 pdo 检查表是不是存在 [重复]

在插入 BigQuery 表之前检查数据是不是已经存在(使用 Python)