欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談mysql返回Boolean類型的幾種情況

 更新時間:2021年06月04日 10:30:05   作者:海棠xun  
這篇文章主要介紹了mysql返回Boolean類型的幾種情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql返回Boolean類型

在這里插入圖片描述

第一種情況,直接返回

select id='22aa' from mytest where age=202  返回1 可封裝為true
select count(*)=1 from mytest where age=202  返回1 可封裝為true
select count(*)=0 from mytest where age=202  返回0 可封裝為false
select count(*)<3 from mytest where age=202  返回1 可封裝為true
select count(*)<=1 from mytest where age=202  返回1 可封裝為true
select name="aa" from mytest where age=10  當name為null時,sql不會報錯,返回結果也為nul,參照第二種情況的sql 3 代碼會報錯

總結:

這種情況類似于java中的判斷語句。只是java中=是賦值的意思,所以用了==來做判斷,而mysql中賦值用set,判斷就直接用=。

第二種情況,返回0或者1也能達到目的

select enable from mytest where age=202  返回1  可封裝為true
select count(*) from mytest  返回4  可封裝為Boolean類型,但為false
select enable from mytest where age=201 返回null  不可封裝為Boolean類型,代碼會直接報錯
select id from mytest where age=202   返回'22aa'   可封裝為Boolean類型,但為false
select id from mytest where age=202   返回'true'   可封裝為Boolean類型,但為true
select id from mytest where age=202   返回'false'   可封裝為Boolean類型,false
//特殊情況
select * from mytest  報錯Expected one result (or null) to be returned by selectOne(), but found: 4
select * from mytest where age=202  返回一組數(shù)據(jù)false 2019-08-28 202 15 1 ,可以封裝為false
select * from mytest where age=202  返回一組數(shù)據(jù)true 2019-08-28 202 15 1 ,可以封裝為true
select * from mytest where age=202  返回一組數(shù)據(jù)aaaa2019-08-28 202 15 1 ,可以封裝為false

總結:

Mybatis是根據(jù)查詢到的記錄數(shù)進行轉換的(1=true,0=false)

需要注意的地方:如果查詢到多條記錄(大于1),返回的卻是false, 這時就與我們的期望的剛好相反。這里,可以換其它方法,可以通過返回記錄數(shù),進行判斷,也可以保證記錄在數(shù)據(jù)庫是唯一的。也可以直接用第一種情況解決。

根據(jù)第4、5、6條sql語句的測試,如果字符串是"true",就可以封裝為true,如果為"false"就可以封裝為false,其他情的字符串都為false。

(猜測,并不準確,需要到mysql官網(wǎng)上來查,如果返回的字段是字符串,將其轉為Boolean時是按什么規(guī)則轉換的,猜測是類似于java中的字符串轉Boolean方法:Boolean.valueOf(“aaa”) //false,該方法如下)

在這里插入圖片描述

在這里插入圖片描述 至于8、9、10的sql返回一組,而接受數(shù)據(jù)的只要一個時的情況,為什么就取了id的值來封裝,有待繼續(xù)研究。

MySQL Boolean類型的坑

MySQL中,Boolean只是 tinyint(1) 的別名,也就是說,MySQL中并沒有真正的bool類型。而SQLAlchemy生成SQL的時候并沒有檢測到 這一點,這就導致一個問題,當使用 bool 類型作為查詢條件時,用不上索引,從而導致掃表的行為:

> SELECT COUNT(*) FROM message WHERE message.is_national = 1 AND message.updated_at > '2020-01-01 00:00:00' AND message.deleted_at IS NULL;
+----------+
| COUNT(*) |
+----------+
| 0        |
+----------+
1 row in set
Time: 0.018s
> SELECT COUNT(*) FROM message WHERE message.is_national is true AND message.updated_at > '2020-01-01 00:00:00' AND message.deleted_at IS NULL;
+----------+
| COUNT(*) |
+----------+
| 0        |
+----------+
1 row in set
Time: 2.162s

注意觀察第一行和第二行的時間,很明顯第二行沒有用上索引,我們來看看 EXPLAIN 的結果便知道了:

> EXPLAIN SELECT COUNT(*) FROM message WHERE message.is_national = 1 AND message.updated_at > '2020-01-01 00:00:00' AND message.de
        leted_at IS NULL;
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1  | SIMPLE | message | ref  | ix_message_updated_at,idx_updated_at_is_national,ix_message_is_national | ix_message_is_national | 1 | const | 1 | Using where |

> EXPLAIN SELECT COUNT(*) FROM message WHERE message.is_national is true AND message.updated_at > '2020-01-01 00:00:00' AND messag
        e.deleted_at IS NULL;
| id | select_type | table   | type | possible_keys | key    | key_len | ref    | rows    | Extra |
| 1  | SIMPLE | message | ALL  | ix_message_updated_at,idx_updated_at_is_national | <null> | <null>  | <null> | 一個很大的數(shù)字 | Using whe
re |

對此,我只想說,太坑了!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • DBeaver連接MySQL提示"Public Key Retrieval is not allowed"問題解決方式

    DBeaver連接MySQL提示"Public Key Retrieval is

    dbeaver數(shù)據(jù)庫連接工具,可以支持幾乎所有的主流數(shù)據(jù)庫.mysql,oracle.sqlserver,db2 等等,這篇文章主要給大家介紹了關于DBeaver連接MySQL提示"Public Key Retrieval is not allowed"問題的解決方式,需要的朋友可以參考下
    2023-10-10
  • 五分鐘帶你搞懂MySQL索引下推

    五分鐘帶你搞懂MySQL索引下推

    這篇文章主要介紹了Mysql的索引下推,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09
  • MySQL服務器連接過程淺析

    MySQL服務器連接過程淺析

    這篇文章主要介紹了MySQL服務器連接過程淺析,本文從源碼分析了MySQL服務器的連接過程,需要的朋友可以參考下
    2015-03-03
  • mysql修改用戶密碼報錯的解決方法

    mysql修改用戶密碼報錯的解決方法

    mysql 初始化時,使用臨時密碼,修改自定義密碼時,由于自定義密碼比較簡單,就出現(xiàn)了不符合密碼策略的問題,這篇文章主要介紹了mysql修改用戶密碼報錯,需要的朋友可以參考下
    2023-03-03
  • MySQL之七種SQL JOINS實現(xiàn)的圖文詳解

    MySQL之七種SQL JOINS實現(xiàn)的圖文詳解

    這篇文章主要介紹了MySQL中七種SQL JOINS的實現(xiàn)方法及圖文詳解,文中也有相關的代碼示例供大家參考,感興趣的同學可以參考閱讀下
    2023-06-06
  • 如何把Mysql卸載干凈(親測有效)

    如何把Mysql卸載干凈(親測有效)

    這篇文章主要介紹了如何把Mysql卸載干凈(親測有效),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • MySQL詳解進行JDBC編程與增刪改查方法

    MySQL詳解進行JDBC編程與增刪改查方法

    JDBC是指Java數(shù)據(jù)庫連接,是一種標準Java應用編程接口( JAVA API),用來連接 Java 編程語言和廣泛的數(shù)據(jù)庫。從根本上來說,JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問到底層數(shù)據(jù)庫
    2022-06-06
  • mysql排序ORDER BY不生效的問題解決

    mysql排序ORDER BY不生效的問題解決

    order by作為一個常用的功能,在項目中應該經常用到,本文主要介紹了mysql排序ORDER BY不生效的問題解決,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • MySQL中用戶授權以及刪除授權的方法

    MySQL中用戶授權以及刪除授權的方法

    這篇文章主要介紹了MySQL中用戶授權以及刪除授權的方法的相關資料,需要的朋友可以參考下
    2015-12-12
  • MySQL磁盤碎片整理實例演示

    MySQL磁盤碎片整理實例演示

    這篇文章主要給大家介紹了關于MySQL磁盤碎片整理的相關資料,為什么數(shù)據(jù)庫會產生碎片,以及如何清理磁盤碎片,還有一些清理磁盤碎片的注意事項,需要的朋友可以參考下
    2022-04-04

最新評論