【问题标题】: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 查询。

标签: mysql


【解决方案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 并且可能会泄漏内存
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
相关资源
最近更新 更多