mysql - 在 GoSQL 中处理数据库触发器

标签 mysql go

我目前正在学习使用 Go sql 驱动程序(与 MySQL)与数据库对话,我想插入一个触发器,当新记录插入表中时该触发器将被激活。

我知道要在纯 SQL 中执行此操作,语句需要如下所示:

CREATE TRIGGER ins_sum BEFORE INSERT ON table_1 
FOR EACH ROW SET @sum = @sum + new.amount

但我不确定这会返回什么,所以不知道如何构建 go/sql 查询。

谢谢!

最佳答案

如果创建触发器成功,您将获得 nil 作为 db.Exec 的第二个返回值另一方面,如果查询失败,您将收到一条错误消息,其中包含原因的详细信息。

例如:

_, err := db.Exec(`CREATE TRIGGER ins_sum BEFORE INSERT ON table_1 FOR EACH ROW SET @sum = @sum + new.amount`)
if err != nil {
    fmt.Println(err)
}
// Output: none

假设您第二次运行相同的查询

_, err := db.Exec(`CREATE TRIGGER ins_sum BEFORE INSERT ON table_1 FOR EACH ROW SET @sum = @sum + new.amount`)
if err != nil {
    fmt.Println(err)
}
// Output: Error 1359: Trigger already exists

或者假设您输入了错误的表名

_, err := db.Exec(`CREATE TRIGGER ins_sum BEFORE INSERT ON table_987 FOR EACH ROW SET @sum = @sum + new.amount`)
if err != nil {
    fmt.Println(err)
}
// Output: Error 1146: Table 'dbname.table_987' doesn't exist

关于mysql - 在 GoSQL 中处理数据库触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47100038/

相关文章:

mysql - 按对话线程中的最新响应对消息进行分组

PHP MySQL 系统调用创建空文件,没有返回值,也没有产生错误信息

java - JUnit 测试不使用 SpringJUnit4ClassRunner 回滚

git - 安装私有(private) Go 模块 : unknown revision error

go - 获取模块名称的API

php - MySQL从表中选择数据并内连接来自另外两个相同表的所有选择

SQL查询问题

go - Pydio Cells插件

algorithm - 获取满足所有键的最少数量的值

Go 支持 Scatter-Gather IO 操作