使用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 数据库中是不是存在表?