gorm 获取修改记录数问题

今天练习golang操作mysql数据库时遇到个问题,没想明白原因。
我使用的gorm来操作mysql,我要实现的效果时,将指定条件记录的state字段改成1,用了两种方式来实现:

方式一、直接使用gorm的事务

    err = e.Orm.Transaction(func(tx *gorm.DB) error {
        db := tx.Model(&data).Where("id IN ?", []int{1,2,3}).Update("state", 1)
        if err = db.Error; err != nil {
            return err
        }
        if db.RowsAffected == 0 {
            return errors.New("无权更新该数据")
        }

        return nil
    })

方式二、使用手动事务

     db := e.Orm.Begin()
    defer func() {
        if err != nil {
            db.Rollback()
        } else {
            db.Commit()
        }
    }()

    db.Model(&data).Where("id IN ?", []int{1,2,3}).Update("state", 1)
    if err = db.Error; err != nil {
        return err
    }

    if db.RowsAffected == 0 {
        return errors.New("无权更新该数据")
    }
    return nil

经过测试发现,方式一可以正确获取到修改的记录数,方式二获取到的修改记录数一直是0, 这是什么原因呢?这两种方式具体有什么区别呢?

如果state本来等于1,RowsAffected可能返回0