您好,登錄后才能下訂單哦!
MySQL中怎么實(shí)現(xiàn)無數(shù)據(jù)插入和有數(shù)據(jù)更新,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
語法格式如下所示。
insert ignore into table(col1,col2) values ('value1','value2');
比如,我們執(zhí)行如下SQL語句向MySQL中插入數(shù)據(jù)。
insert ignore into user_info (last_name,first_name) values ('binghe','binghe');
這樣一來,如果表中已經(jīng)存在last_name='binghe'且first_name='binghe'的數(shù)據(jù),就不會(huì)插入,如果沒有就會(huì)插入一條新數(shù)據(jù)。
上面的是一種用法,也可以用 INSERT .... SELECT 語句來實(shí)現(xiàn),這里就不舉例了。
分析標(biāo)題題目
接下來,我們再來看標(biāo)題中的題目,向MySQL中插入數(shù)據(jù),存在就更新,不存在則插入。本質(zhì)上數(shù)據(jù)表中還是需要存在唯一鍵,也就是唯一索引的。往往在面試中,面試官都會(huì)默許存在這些前置條件。
這里,有兩種方法可以實(shí)現(xiàn)這個(gè)效果。一種方法是結(jié)合INSERT語句和ON DUPLICATE KEY UPDATE語句實(shí)現(xiàn),另一種方法是通過REPLACE語句實(shí)現(xiàn)。
INSERT語句和ON DUPLICATE KEY UPDATE語句實(shí)現(xiàn)
如果指定了ON DUPLICATE KEY UPDATE,并且插入行后會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行UPDATE。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個(gè)語句具有相同的效果:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。
REPLACE語句實(shí)現(xiàn)
使用REPLACE的最大好處就是可以將DELETE和INSERT合二為一,形成一個(gè)原子操作。這樣就可以不必考慮在同時(shí)使用DELETE和INSERT時(shí)添加事務(wù)等復(fù)雜操作了。在使用REPLACE時(shí),表中必須有唯一索引,而且這個(gè)索引所在的字段不能允許空值,否則REPLACE就和INSERT完全一樣的。在執(zhí)行REPLACE后,系統(tǒng)返回了所影響的行數(shù),如果返回1,說明在表中并沒有重復(fù)的記錄,如果返回2,說明有一條重復(fù)記錄,系統(tǒng)自動(dòng)先調(diào)用了DELETE刪除這條記錄,然后再記錄用INSERT來插入這條記錄。
語法和INSERT非常的相似,如下面的REPLACE語句是插入或更新一條記錄。
REPLACE INTO users (id,name,age) VALUES(1, 'binghe', 18);
看完上述內(nèi)容,你們掌握MySQL中怎么實(shí)現(xiàn)無數(shù)據(jù)插入和有數(shù)據(jù)更新的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。