Goweb---Gorm操作数据库(三) 更新
1.表结构
2.表初始数据(只是我的)
3.保存操作
保存 是一个组合函数。 如果保存值不包含主键,它将执行 Create,否则它将执行 Update (包含所有字段)。
3.1 语句1 :db.Save(&User{Name: “jinzhu”, Age: 100})
上面的语句相当于:
INSERT INTO `users` (`name`,`age`,`birthday`) VALUES ("jinzhu",100,"0000-00-00 00:00:00");
代码:
package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)type User struct {ID int `gorm:"column:id"`Name string `gorm:"column:name"`Age int `gorm:"column:age"`Birthday string `gorm:"column:birthday"`
}func main() {dsn := "root:828924@tcp(127.0.0.1:3306)/user?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {fmt.Println("连接数据库失败:", err)}db.Save(&User{Name: "jinzhu", Age: 100})}
结果:
上面的语句若改为
db.Save(&User{ID: 1, Name: “jinzhu”, Age: 100})
由于有了主键,因此会更新表中主键ID为1的字段,也就是相当于执行下面的语句:
UPDATEusers
SETname
=“jinzhu”,age
=100,birthday
=“0000-00-00 00:00:00” WHERE `id’ = 1
4.更新操作
4.1更新单个列
当使用 Update 更新单列时,需要有一些条件,否则将会引起ErrMissingWhereClause 错误,查看 阻止全局更新 了解详情。 当使用 Model 方法,并且它有主键值时,主键将会被用于构建条件
下面的图片都是一个操作对应一个效果
测试代码
package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)type User struct {ID int `gorm:"column:id"`Name string `gorm:"column:name"`Age int `gorm:"column:age"`Birthday string `gorm:"column:birthday"`
}func main() {dsn := "root:828924@tcp(127.0.0.1:3306)/user?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {fmt.Println("连接数据库失败:", err)}// 根据条件更新//db.Model(&User{}).Where("age = ?", 18).Update("age", 30)// UPDATE users SET age=30 WHERE age=18;var user Useruser.ID = 2db.Model(&user).Update("age", 40)}
4.2 更新选定字段
db.Model(&user).Select(“name”).Updates(map[string]interface{}{“name”: “hello”, “age”: 18})
db.Model(&user).Omit(“name”).Updates(map[string]interface{}{“name”: “Tom”, “age”: 66})
db.Model(&user).Where(“id = ?”, 0).Select(“*”).Updates(User{ID: 1, Name: “jinzhu”, Age: 0})
测试代码
package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm"
)type User struct {ID int `gorm:"column:id"`Name string `gorm:"column:name"`Age int `gorm:"column:age"`Birthday string `gorm:"column:birthday"`
}func main() {dsn := "root:828924@tcp(127.0.0.1:3306)/user?charset=utf8mb4&parseTime=True&loc=Local"db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})if err != nil {fmt.Println("连接数据库失败:", err)}var user User// 选择 Map 的字段// User 的 ID 是 `2`://db.Model(&user).Select("name").Updates(map[string]interface{}{"name": "hello", "age": 18})// UPDATE users SET name='hello' WHERE id=2;//db.Model(&user).Omit("name").Updates(map[string]interface{}{"name": "Tom", "age": 66})// UPDATE users SET age=66 WHERE id=2;// 选择所有字段(选择包括零值字段的所有字段)db.Model(&user).Where("id = ?", 0).Select("*").Updates(User{ID: 1, Name: "jinzhu", Age: 0})}