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