在數(shù)據(jù)查詢(xún)過(guò)程中,我們經(jīng)常希望在更新行的同時(shí)又希望獲得該行的信息,要怎么做才能避免重復(fù)的查詢(xún)呢?很遺憾的是,mysql并不支持像PostgreSQL那樣的UPDATE RETURNING語(yǔ)法,這個(gè)語(yǔ)法可以幫咱們?cè)诟碌臅r(shí)候同時(shí)返回該行的信息,還好在MYSQL中你可以使用變量來(lái)解決這個(gè)問(wèn)題.例如,我們的一個(gè)客戶(hù)希望能夠更高效地更新一條記錄的時(shí)間戳,同時(shí)希望當(dāng)前記錄中存放的時(shí)間表戳是什么,簡(jiǎn)單地,可以用下面的代碼實(shí)現(xiàn);
UPDATE bhtable1 LASTUPDATED = NOW() WHERE ID=1; //更新時(shí)間
SELECT LASTUPDATED FROM bhtable1 where id=1; //讀取時(shí)間
使用變量,我們可以按以下方式重寫(xiě)查詢(xún);
UPDATE bhtable1 SET LASTUPDATED =NOW() WHERE ID=1 AND @now := NOW();
SELECT @now;
上面看起來(lái)仍然需要兩個(gè)查詢(xún),需要兩次網(wǎng)絡(luò)來(lái)回,但是這里的第二個(gè)查詢(xún)無(wú)須訪(fǎng)問(wèn)任何數(shù)據(jù)表,所以會(huì)快非常多.南昌網(wǎng)站制作公司<百恒網(wǎng)絡(luò)工程師提示大家,如果網(wǎng)絡(luò)延遲非常大,那么這個(gè)優(yōu)化的意可能不大,不過(guò)對(duì)于這個(gè)客戶(hù),這樣做的效果很好.
原創(chuàng)文章出自:百恒網(wǎng)絡(luò) 如轉(zhuǎn)載請(qǐng)注明出處!專(zhuān)業(yè),專(zhuān)注于南昌建網(wǎng)站,為用戶(hù)提供高品質(zhì)的網(wǎng)絡(luò)產(chǎn)品及優(yōu)質(zhì)服務(wù)是我們始終的追求.