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 main
import (
"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 main
import (
"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 User
user.ID = 2
db.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 main
import (
"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})
}