av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈?zhǔn)讲僮?寫入保存

Insert/Replace/Save

這幾個(gè)鏈?zhǔn)讲僮鞣椒ㄓ糜跀?shù)據(jù)的寫入,并且支持自動(dòng)的單條或者批量的數(shù)據(jù)寫入,區(qū)別如下:

10年的西藏網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整西藏建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“西藏網(wǎng)站設(shè)計(jì)”,“西藏網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

  • ?Insert?:使用?INSERT INTO?語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)寫入,如果寫入的數(shù)據(jù)中存在主鍵或者唯一索引時(shí),返回失敗,否則寫入一條新數(shù)據(jù);
  • ?Replace?:使用?REPLACE INTO?語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)寫入,如果寫入的數(shù)據(jù)中存在主鍵或者唯一索引時(shí),會(huì)刪除原有的記錄,必定會(huì)寫入一條新記錄;
  • ?Save?:使用?INSERT INTO?語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)寫入,如果寫入的數(shù)據(jù)中存在主鍵或者唯一索引時(shí),更新原有數(shù)據(jù),否則寫入一條新數(shù)據(jù);

在部分?jǐn)?shù)據(jù)庫(kù)類型中,并不支持?Replace/Save?方法。

這幾個(gè)方法往往需要結(jié)合?Data?方法使用,該方法用于傳遞數(shù)據(jù)參數(shù),用于數(shù)據(jù)寫入/更新等寫操作,支持的參數(shù)為?string/map/slice/struct/*struct?。例如,在進(jìn)行?Insert?操作時(shí),開發(fā)者可以傳遞任意的?map?類型,如: ?map[string]string/map[string]interface{}/map[interface{}]interface{}?等等,也可以傳遞任意的?struct/*struct/[]struct/[]*struct?類型。此外,這幾個(gè)方法的參數(shù)列表也支持直接的?data?參數(shù)輸入,該參數(shù)?Data?方法參數(shù)一致。

InsertIgnore

從?GOframe v1.9.0?版本開始,?GoFrame?的?ORM?提供了一個(gè)常用寫入方法?InsertIgnore?,用于寫入數(shù)據(jù)時(shí)如果寫入的數(shù)據(jù)中存在主鍵或者唯一索引時(shí),忽略錯(cuò)誤繼續(xù)執(zhí)行寫入。該方法定義如下:

func (m *Model) InsertIgnore(data ...interface{}) (result sql.Result, err error)

InsertAndGetId

從?goframe v1.15.7?版本開始,?goframe?的?ORM?同時(shí)也提供了一個(gè)常用寫入方法?InsertAndGetId?,用于寫入數(shù)據(jù)時(shí)并直接返回自增字段的ID。該方法定義如下:

func (m *Model) InsertAndGetId(data ...interface{}) (lastInsertId int64, err error)

OnDuplicate/OnDuplicateEx

?OnDuplicate/OnDuplicateEx?方法需要結(jié)合?Save?方法一起使用,用于指定?Save?方法的更新/不更新字段,參數(shù)為字符串、字符串?dāng)?shù)組、?Map?。例如:

OnDuplicate("nickname, age")
OnDuplicate("nickname", "age")
OnDuplicate(g.Map{
    "nickname": gdb.Raw("CONCAT('name_', VALUES(`nickname`))"),
})
OnDuplicate(g.Map{
    "nickname": "passport",
})

其中?OnDuplicateEx?用于排除指定忽略更新的字段,排除的字段需要在寫入的數(shù)據(jù)集合中。

使用示例

示例1,基本使用

數(shù)據(jù)寫入/保存方法往往需要結(jié)合?Data?方法使用:

// INSERT INTO `user`(`name`) VALUES('john')
g.Model("user").Data(g.Map{"name": "john"}).Insert()

// INSERT IGNORE INTO `user`(`uid`,`name`) VALUES(10000,'john')
g.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).InsertIgnore()

// REPLACE INTO `user`(`uid`,`name`) VALUES(10000,'john')
g.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).Replace()

// INSERT INTO `user`(`uid`,`name`) VALUES(10001,'john') ON DUPLICATE KEY UPDATE `uid`=VALUES(`uid`),`name`=VALUES(`name`)
g.Model("user").Data(g.Map{"uid": 10001, "name": "john"}).Save()

也可以不使用?Data?方法,而給寫入/保存方法直接傳遞數(shù)據(jù)參數(shù):

g.Model("user").Insert(g.Map{"name": "john"})
g.Model("user").Replace(g.Map{"uid": 10000, "name": "john"})
g.Model("user").Save(g.Map{"uid": 10001, "name": "john"})

數(shù)據(jù)參數(shù)也常用struct類型,例如當(dāng)表字段為 ?uid/name/site? 時(shí):

type User struct {
    Uid  int    `orm:"uid"`
    Name string `orm:"name"`
    Site string `orm:"site"`
}
user := &User{
    Uid:  1,
    Name: "john",
    Site: "https://goframe.org",
}
// INSERT INTO `user`(`uid`,`name`,`site`) VALUES(1,'john','https://goframe.org')
g.Model("user").Data(user).Insert()

示例2,數(shù)據(jù)批量寫入

// INSERT INTO `user`(`name`) VALUES('john_1'),('john_2'),('john_3')
g.Model("user").Data(g.List{
    {"name": "john_1"},
    {"name": "john_2"},
    {"name": "john_3"},
}).Insert()

可以通過(guò)?Batch?方法指定批量操作中分批寫入條數(shù)數(shù)量(默認(rèn)是10),以下示例將會(huì)被拆分為兩條寫入請(qǐng)求:

// INSERT INTO `user`(`name`) VALUES('john_1'),('john_2')
// INSERT INTO `user`(`name`) VALUES('john_3')
g.Model("user").Data(g.List{
    {"name": "john_1"},
    {"name": "john_2"},
    {"name": "john_3"},
}).Batch(2).Insert()

示例3,數(shù)據(jù)批量保存

批量保存操作與單條保存操作原理是一樣的,當(dāng)寫入的數(shù)據(jù)中存在主鍵或者唯一索引時(shí)將會(huì)更新原有記錄值,否則新寫入一條記錄。

// INSERT INTO `user`(`uid`,`name`) VALUES(10000,'john_1'),(10001,'john_2'),(10002,'john_3')
// ON DUPLICATE KEY UPDATE `uid`=VALUES(`uid`),`name`=VALUES(`name`)
g.Model("user").Data(g.List{
    {"uid":10000, "name": "john_1"},
    {"uid":10001, "name": "john_2"},
    {"uid":10002, "name": "john_3"},
}).Save()

RawSQL語(yǔ)句嵌入

?gdb.Raw?是字符串類型,該類型的參數(shù)將會(huì)直接作為?SQL?片段嵌入到提交到底層的?SQL?語(yǔ)句中,不會(huì)被自動(dòng)轉(zhuǎn)換為字符串參數(shù)類型、也不會(huì)被當(dāng)做預(yù)處理參數(shù)。例如:

// INSERT INTO `user`(`id`,`passport`,`password`,`nickname`,`create_time`) VALUES('id+2','john','123456','now()')
g.Model("user").Data(g.Map{
	"id":          "id+2",
	"passport":    "john",
	"password":    "123456",
	"nickname":    "JohnGuo",
	"create_time": "now()",
}).Insert()
// 執(zhí)行報(bào)錯(cuò):Error Code: 1136. Column count doesn't match value count at row 1

使用?gdb.Raw?改造后:

// INSERT INTO `user`(`id`,`passport`,`password`,`nickname`,`create_time`) VALUES(id+2,'john','123456',now())
g.Model("user").Data(g.Map{
	"id":          gdb.Raw("id+2"),
	"passport":    "john",
	"password":    "123456",
	"nickname":    "JohnGuo",
	"create_time": gdb.Raw("now()"),
}).Insert()

分享名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈?zhǔn)讲僮?寫入保存
新聞來(lái)源:http://uogjgqi.cn/article/dpgciji.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流