golang 的 gorm操作数据库时如何设置当前会话的mysql变量?

发布于 2022-09-12 23:52:32 字数 951 浏览 21 评论 0

问题描述

mysql配置中开启了binlog。但由于某些需求,某一张表的操作不想记binlog日志。比如叫A表, 在操作A表之前 我先执行

   DB.Exec(fmt.Sprintf("SET sql_log_bin=%d", 0)).Error

然后再执行

 DB.Exec("insert into A.......").Error

执行完之后再执行:

 DB.Exec(fmt.Sprintf("SET sql_log_bin=%d", 1)).Error

但这样操作完之后,binlog文件中还是记录了A表的操作。我想不记A表的操作,效果没有实现。

问题出现的环境背景及自己尝试过哪些方法

windows,gorm

相关代码

DB, err = gorm.Open("mysql", "........")
DB.LogMode(debug.ShowSQL)
DB.DB().SetMaxOpenConns(255)
DB.DB().SetMaxIdleConns(128)
DB.DB().SetConnMaxLifetime(7200 * time.Second)

/////
 DB.Exec(fmt.Sprintf("SET sql_log_bin=%d", 0)).Error
 DB.Exec("insert into A.......").Error
 DB.Exec(fmt.Sprintf("SET sql_log_bin=%d", 1)).Error

你期待的结果是什么?实际看到的错误信息又是什么?

期待操作A表不记录binlog。实际是我设置了会话级别的sql_log_bin没有效果,还是在binlog记录了A表的操作。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌︼了一个春 2022-09-19 23:52:32

默认,golang是在最终查询时候才分配获取连接资源的,所以如果需要为某个操作设置会话变量。可以将他们写在一个事务当中,保证他们是同一个会话连接。

tx:=db.Begin()
tx.Exec("set session ……")
tx.Select()
tx.Commit()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文