- demo 數(shù)據(jù)表
方案一救拉、 insert into table (字段,索引字段) values (字段耐朴,索引字段值) on duplicate key update 主鍵=主鍵
以上寫法是在遇到唯一值的數(shù)據(jù)可以更新的時(shí)候员萍,不要更新,只把主鍵的值加1
當(dāng)然了,語法是這個(gè)語法牲平,更新的處理可以自己處理闲昭,也可以是id=id
或者uid=uid+1
自己隨便處理
總之罐寨,結(jié)果是其實(shí)沒有更新數(shù)據(jù),原始數(shù)據(jù)是不變的序矩,只更新了key update
后面的字段
前提是要有唯一字段的值鸯绿,否則是會(huì)正常插入數(shù)據(jù)的
適用于不需要更新,但想知道一共處理了多少條數(shù)據(jù)的場景簸淀,比如抓取數(shù)據(jù)
當(dāng)然啦瓶蝴,最好還是不要更新主鍵,因?yàn)槟阍瓉韺?duì)應(yīng)的主鍵再加1租幕,可能那個(gè)數(shù)字會(huì)跟下一條數(shù)據(jù)重復(fù)
CREATE TABLE `test` (
`content` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`uid` INT(11) UNSIGNED NOT NULL,
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE INDEX `unique` (`uid`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;
執(zhí)行更新前.png
執(zhí)行 insert into test (uid,content) values (2,'four') on duplicate key update id=id+1
之后舷手,發(fā)現(xiàn)只更新了 id
其他的數(shù)據(jù)并沒有更新
執(zhí)行更新后
方案二、 replace into
執(zhí)行前
運(yùn)行sql
replace into test (uid,content) values (3,'three')
執(zhí)行后
改變字段值
總結(jié)
- 必須要有唯一索引
- 只有唯一索引的值不會(huì)變劲绪,其他的值都會(huì)變男窟,包括自增ID
- 是先刪除舊的數(shù)據(jù)然后插入新的,在這個(gè)過程中珠叔,還需要重新維護(hù)索引蝎宇,所以速度會(huì)慢
方案三、 insert ignore into
這個(gè)語法會(huì)忽略報(bào)錯(cuò)
方案四祷安,先查詢姥芥,再做插入還是更新的判斷。
四是最不推薦的方案汇鞭,個(gè)人是推薦平時(shí)項(xiàng)目中使用 方案二