您好,登錄后才能下訂單哦!
這篇文章主要介紹了MySQL中where 1=1方法怎么使用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇MySQL中where 1=1方法怎么使用文章都會有所收獲,下面我們一起來看看吧。
如果要問在SQL語句的where條件中多加1=1
目的是什么,很簡單:使得where條件語句永遠為真。本質上就是雖然加了where條件,但實際上永遠為真,也就相當于沒有加任何約束條件。
使用該語句的場景主要是:動態構建SQL語句。
String sql = "select * from t_user where 1=1 "; if(!b.equals("")){ sql += "and b='"+b+"'"; }
在上述語句拼寫時,使用where 1=1
,當b不等于空時,可以直接拼接“and”語句,而不會導致語法錯誤。如果沒有where 1=1
,原來的SQL語句就變成(假設b傳入了"abc"):
"select * from t_user where and b= 'abc' ";
很明顯,上述SQL語句會有語法錯誤。所以,之所以添加1=1
,就是為了方便SQL拼接。
從另外一個角度來講,不僅僅1=1
可以這樣使用,像:1<>2
、2>1
、'a'='a'
等表達式,只要結果為true,都可以如此使用。
上面講了where 1=1
的來歷及使用,那么你是否使用過where 1<>1
的形式呢?
你還別說,where 1<>1
也是有使用場景的,比如:只獲取表結構而不取數據。
create table t_temp as select * from t_user where 1<>1
上述語句,創建了一個與t_user表結構一樣但沒有任何數據的新表t_temp。
當然,除了表結構,其他的結構也可以如此使用。
有人說,使用where 1=1
可能會有性能問題,咱們直接來實驗一下。
mysql 8.0.18,t_user表,id_no字段有索引:
explain select * from t_user where id_no = 'Tom25'; explain select * from t_user where 1=1 and id_no = 'Tom25';
執行上述兩行SQL語句,explain結果都是如下:
也就是說,1=1
這樣條件,并不影響索引和性能,從explain結果上可以看出兩者并無本質區別。
之所以不同的SQL語句,呈現了相同的結果,這是因為被Mysql優化了。Mysql在處理指令時,會對1=1
這類無效的條件進行優化處理。這個與Java的編譯器有些像,很多無效的判斷或語句,在編譯成字節碼時,編譯器會進行優化處理。
雖然說1=1會被優化器優化掉,但優化操作本身還是會消耗MySQL的性能的,如果能夠從根本上避免這種情況的出現,那不就更好了。
以Mybatis為例,在使用where 1=1
時,通常會是如下寫法:
<select id="queryUser" parameterType="com.choupangxia.entity.User" resultType="java.lang.Integer"> select count(id) from t_user u where 1=1 <if test="username !=null and username !='' "> AND u.username = #{username} </if> <if test="userNo !=null and userNo !='' "> AND u.user_no = #{userNo} </if> </select>
這里where 1=1
的作用同上。但如果你更進一步去了解Mybatis的語法及標簽,可以使用<where>
標簽來代替where 1=1
:
<select id="queryUser" parameterType="com.choupangxia.entity.User" resultType="java.lang.Integer"> select count(id) from t_user u <where> <if test="username !=null and username !='' "> u.username = #{username} </if> <if test="userNo !=null and userNo !='' "> AND u.user_no = #{userNo} </if> </where> </select>
這樣,在查詢數據比較大的情況下,可減少MySQL為了優化1=1
這樣的條件而損失的性能。
關于“MySQL中where 1=1方法怎么使用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“MySQL中where 1=1方法怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。