W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
為安全性保證、防止誤操作,?Update
?及?Delete
?方法必須帶有?Where
?條件才能提交執(zhí)行,否則將會錯誤返回,錯誤信息如:?there should be WHERE condition statement for XXX operation
?。?goframe
?是一款用于企業(yè)生產(chǎn)級別的框架,各個模塊設(shè)計嚴(yán)謹(jǐn),工程實踐的細(xì)節(jié)處理得比較好。
?Update
?用于數(shù)據(jù)的更新,往往需要結(jié)合?Data
?及?Where
?方法共同使用。?Data
?方法用于指定需要更新的數(shù)據(jù),?Where
?方法用于指定更新的條件范圍。同時,?Update
?方法也支持直接給定數(shù)據(jù)和條件參數(shù)。
使用示例:
// UPDATE `user` SET `name`='john guo' WHERE name='john'
g.Model("user").Data(g.Map{"name" : "john guo"}).Where("name", "john").Update()
g.Model("user").Data("name='john guo'").Where("name", "john").Update()
// UPDATE `user` SET `status`=1 ORDER BY `login_time` asc LIMIT 10
g.Model("user").Data("status", 1).Order("login_time asc").Limit(10).Update()
// UPDATE `user` SET `status`=1 WHERE 1
g.Model("user").Data("status=1").Where(1).Update()
g.Model("user").Data("status", 1).Where(1).Update()
g.Model("user").Data(g.Map{"status" : 1}).Where(1).Update()
也可以直接給?Update
?方法傳遞?data
?及?where
?參數(shù):
// UPDATE `user` SET `name`='john guo' WHERE name='john'
g.Model("user").Update(g.Map{"name" : "john guo"}, "name", "john")
g.Model("user").Update("name='john guo'", "name", "john")
// UPDATE `user` SET `status`=1 WHERE 1
g.Model("user").Update("status=1", 1)
g.Model("user").Update(g.Map{"status" : 1}, 1)
可以使用?Counter
?類型參數(shù)對特定的字段進(jìn)行數(shù)值操作,例如:增加、減少操作。
?Counter
?數(shù)據(jù)結(jié)構(gòu)定義:
// Counter is the type for update count.
type Counter struct {
Field string
Value float64
}
?Counter
?使用示例,字段自增:
updateData := g.Map{
"views": &gdb.Counter{
Field: "views",
Value: 1,
},
}
// UPDATE `article` SET `views`=`views`+1 WHERE `id`=1
result, err := db.Update("article", updateData, "id", 1)
?Counter
?也可以實現(xiàn)非自身字段的自增,例如:
updateData := g.Map{
"views": &gdb.Counter{
Field: "clicks",
Value: 1,
},
}
// UPDATE `article` SET `views`=`clicks`+1 WHERE `id`=1
result, err := db.Update("article", updateData, "id", 1)
我們可以通過?Increment
?和?Decrement
?方法實現(xiàn)對指定字段的自增/自減常用操作。兩個方法的定義如下:
// Increment increments a column's value by a given amount.
func (m *Model) Increment(column string, amount float64) (sql.Result, error)
// Decrement decrements a column's value by a given amount.
func (m *Model) Decrement(column string, amount float64) (sql.Result, error)
使用示例:
// UPDATE `article` SET `views`=`views`+10000 WHERE `id`=1
g.Model("article").Where("id", 1).Increment("views", 10000)
// UPDATE `article` SET `views`=`views`-10000 WHERE `id`=1
g.Model("article").Where("id", 1).Decrement("views", 10000)
?gdb.Raw
?是字符串類型,該類型的參數(shù)將會直接作為?SQL
?片段嵌入到提交到底層的?SQL
?語句中,不會被自動轉(zhuǎn)換為字符串參數(shù)類型、也不會被當(dāng)做預(yù)處理參數(shù)。例如:
// UPDATE `user` SET login_count='login_count+1',update_time='now()' WHERE id=1
g.Model("user").Data(g.Map{
"login_count": "login_count+1",
"update_time": "now()",
}).Where("id", 1).Update()
// 執(zhí)行報錯:Error Code: 1136. Column count doesn't match value count at row 1
使用?gdb.Raw
?改造后:
// UPDATE `user` SET login_count=login_count+1,update_time=now() WHERE id=1
g.Model("user").Data(g.Map{
"login_count": gdb.Raw("login_count+1"),
"update_time": gdb.Raw("now()"),
}).Where("id", 1).Update()
?Delete
?方法用于數(shù)據(jù)的刪除。
使用示例:
// DELETE FROM `user` WHERE uid=10
g.Model("user").Where("uid", 10).Delete()
// DELETE FROM `user` ORDER BY `login_time` asc LIMIT 10
g.Model("user").Order("login_time asc").Limit(10).Delete()
也可以直接給?Delete
?方法傳遞?where
?參數(shù):
// DELETE FROM `user` WHERE `uid`=10
g.Model("user").Delete("uid", 10)
// DELETE FROM `user` WHERE `score`<60
g.Model("user").Delete("score < ", 60)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: