Mysql 在GoSQL中处理数据库触发器

Mysql 在GoSQL中处理数据库触发器,mysql,go,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作为第二个返回值,另一方

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

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

CREATE TRIGGER ins_sum BEFORE INSERT ON table_1 
FOR EACH ROW SET @sum = @sum + new.amount
但我不确定这会返回什么,所以我不知道如何构造为go/sql查询


谢谢

如果创建触发器成功,您将获得
nil
作为第二个返回值,另一方面,如果查询失败,您将获得一个错误,并详细说明原因

例如:

_, 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

如果创建触发器成功,您将获得
nil
作为第二个返回值。另一方面,如果查询失败,您将获得一个错误,并详细说明原因

例如:

_, 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