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