mysql中判斷記錄是否存在方法比較
更新時(shí)間:2011年07月20日 20:50:09 作者:
把數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)的時(shí),常常會(huì)碰到先要檢測(cè)要插入的記錄是否存在,然后決定是否要寫入。
我這里總結(jié)了判斷記錄是否存在的常用方法:
sql語(yǔ)句:select count(*) from tablename;
然后讀取count(*)的值判斷記錄是否存在。對(duì)于這種方法性能上有些浪費(fèi),我們只是想判斷記錄記錄是否存在,沒有必要全部都查出來(lái)。
以下這個(gè)方法是我推薦的。
sql語(yǔ)句:select 1 from tablename where col = col limit 1;
然后讀取語(yǔ)句執(zhí)行所影響的行數(shù)。
當(dāng)然這里limit 1很重要。這要mysql找到一條記錄后就不會(huì)在往下找了。這里執(zhí)行所影響的行數(shù)不是0就是1,性能提高了不少。
如果你用的是PDO,可以用rowCount(),很容易就都到執(zhí)行所影響的行數(shù)。
這里還有人可能會(huì)去讀取sql語(yǔ)句查詢到的記錄,然后判斷記錄是否存在,從而判斷記錄是否存在。這個(gè)方法雖然可行,但對(duì)于我們的要求來(lái)說(shuō),還是有些浪費(fèi),我們不需要查詢到的記錄,所有性能上會(huì)有損失。這里不推薦。
sql語(yǔ)句:select count(*) from tablename;
然后讀取count(*)的值判斷記錄是否存在。對(duì)于這種方法性能上有些浪費(fèi),我們只是想判斷記錄記錄是否存在,沒有必要全部都查出來(lái)。
以下這個(gè)方法是我推薦的。
sql語(yǔ)句:select 1 from tablename where col = col limit 1;
然后讀取語(yǔ)句執(zhí)行所影響的行數(shù)。
當(dāng)然這里limit 1很重要。這要mysql找到一條記錄后就不會(huì)在往下找了。這里執(zhí)行所影響的行數(shù)不是0就是1,性能提高了不少。
如果你用的是PDO,可以用rowCount(),很容易就都到執(zhí)行所影響的行數(shù)。
這里還有人可能會(huì)去讀取sql語(yǔ)句查詢到的記錄,然后判斷記錄是否存在,從而判斷記錄是否存在。這個(gè)方法雖然可行,但對(duì)于我們的要求來(lái)說(shuō),還是有些浪費(fèi),我們不需要查詢到的記錄,所有性能上會(huì)有損失。這里不推薦。
相關(guān)文章
MySQL數(shù)學(xué)函數(shù)簡(jiǎn)明總結(jié)
這篇文章主要介紹了MySQL數(shù)學(xué)函數(shù)簡(jiǎn)明總結(jié),本文總結(jié)了大多數(shù)常用的MySQL數(shù)學(xué)函數(shù),并給出了使用實(shí)例,需要的朋友可以參考下2014-09-09MySQL中between...and的使用對(duì)索引的影響說(shuō)明
這篇文章主要介紹了MySQL中between...and的使用對(duì)索引的影響說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07MySQL 數(shù)據(jù)庫(kù)如何解決高并發(fā)問題
這篇文章主要介紹了MySQL 如何處理高并發(fā),幫助大家更好的優(yōu)化MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-09-09mysql正確刪除數(shù)據(jù)的方法(drop,delete,truncate)
這篇文章主要給大家介紹了關(guān)于mysql正確刪除數(shù)據(jù)的相關(guān)資料,DELETE語(yǔ)句是MySQL中最常用的刪除數(shù)據(jù)的方式之一,但也有幾種其他方法來(lái)實(shí)現(xiàn),需要的朋友可以參考下2023-10-10mysql判斷當(dāng)前時(shí)間是否在開始與結(jié)束時(shí)間之間且開始與結(jié)束時(shí)間允許為空
這篇文章主要介紹了mysql判斷當(dāng)前時(shí)間是否在開始與結(jié)束時(shí)間之間且開始與結(jié)束時(shí)間允許為空,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09