最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql json格式數(shù)據(jù)查詢操作

 更新時間:2020年12月01日 15:32:49   作者:阿布QAQ~  
這篇文章主要介紹了mysql json格式數(shù)據(jù)查詢操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

預設表名是 base_data , json列名是 json_value

json_value的值是

{“ids”:[“a”,“b”],“datas”:[{“name”:“張三”}]}

那么查詢語句應該是

select * from base_data where JSON_CONTAINS(json_value -> "$.ids", JSON_ARRAY('a'));

或者

select * from base_data where JSON_CONTAINS(json_value -> "$.ids[*]", JSON_ARRAY('a'));

兩種都行,具體什么區(qū)別暫時還不得而知

補充知識:mysql中varchar字段長度超過限制長度自動截取的問題-----MySQL的sql_mode模式說明及設置

MySQL的sql_mode合理設置

sql_mode是個很容易被忽視的變量,默認值是空值,在這種設置下是可以允許一些非法操作的,比如允許一些非法數(shù)據(jù)的插入。在生產(chǎn)環(huán)境必須將這個值設置為嚴格模式,所以開發(fā)、測試環(huán)境的數(shù)據(jù)庫也必須要設置,這樣在開發(fā)測試階段就可以發(fā)現(xiàn)問題.

sql model 常用來解決下面幾類問題

(1) 通過設置sql mode, 可以完成不同嚴格程度的數(shù)據(jù)校驗,有效地保障數(shù)據(jù)準備性。

(2) 通過設置sql model 為寬松模式,來保證大多數(shù)sql符合標準的sql語法,這樣應用在不同數(shù)據(jù)庫之間進行遷移時,則不需要對業(yè)務sql 進行較大的修改。

(3) 在不同數(shù)據(jù)庫之間進行數(shù)據(jù)遷移之前,通過設置SQL Mode 可以使MySQL 上的數(shù)據(jù)更方便地遷移到目標數(shù)據(jù)庫中。

sql_mode常用值如下:

ONLY_FULL_GROUP_BY:

對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現(xiàn),那么這個SQL是不合法的,因為列不在GROUP BY從句中

NO_AUTO_VALUE_ON_ZERO:

該值影響自增長列的插入。默認設置下,插入0或NULL代表生成下一個自增長值。如果用戶 希望插入的值為0,而該列又是自增長的,那么這個選項就有用了。

STRICT_TRANS_TABLES:

在該模式下,如果一個值不能插入到一個事務表中,則中斷當前的操作,對非事務表不做限制

NO_ZERO_IN_DATE:

在嚴格模式下,不允許日期和月份為零

NO_ZERO_DATE:

設置該值,mysql數(shù)據(jù)庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:

在INSERT或UPDATE過程中,如果數(shù)據(jù)被零除,則產(chǎn)生錯誤而非警告。如 果未給出該模式,那么數(shù)據(jù)被零除時MySQL返回NULL

NO_AUTO_CREATE_USER:

禁止GRANT創(chuàng)建密碼為空的用戶

NO_ENGINE_SUBSTITUTION:

如果需要的存儲引擎被禁用或未編譯,那么拋出錯誤。不設置此值時,用默認的存儲引擎替代,并拋出一個異常

PIPES_AS_CONCAT:

將"||"視為字符串的連接操作符而非或運算符,這和Oracle數(shù)據(jù)庫是一樣的,也和字符串的拼接函數(shù)Concat相類似

ANSI_QUOTES:

啟用ANSI_QUOTES后,不能用雙引號來引用字符串,因為它被解釋為識別符

ORACLE的sql_mode設置等同:

PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

如果使用mysql,為了繼續(xù)保留大家使用oracle的習慣,可以對mysql的sql_mode設置如下:

在my.cnf添加如下配置

[mysqld]

sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,

ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,PIPES_AS_CONCAT,ANSI_QUOTES'

注意:

MySQL5.6和MySQL5.7默認的sql_mode模式參數(shù)是不一樣的,5.6的mode是NO_ENGINE_SUBSTITUTION,其實表示的是一個空值,相當于沒有什么模式設置,可以理解為寬松模式。5.7的mode是STRICT_TRANS_TABLES,也就是嚴格模式。

如果設置的是寬松模式,那么我們在插入數(shù)據(jù)的時候,即便是給了一個錯誤的數(shù)據(jù),也可能會被接受,并且不報錯,例如:我在創(chuàng)建一個表時,該表中有一個字段為name,給name設置的字段類型時char(10),如果我在插入數(shù)據(jù)的時候,其中name這個字段對應的有一條數(shù)據(jù)的長度超過了10,例如'1234567890abc',超過了設定的字段長度10,那么不會報錯,并且取前十個字符存上,也就是說你這個數(shù)據(jù)被存為了'1234567890',而'abc'就沒有了,但是我們知道,我們給的這條數(shù)據(jù)是錯誤的,因為超過了字段長度,但是并沒有報錯,并且mysql自行處理并接受了,這就是寬松模式的效果,其實在開發(fā)、測試、生產(chǎn)等環(huán)境中,我們應該采用的是嚴格模式,出現(xiàn)這種錯誤,應該報錯才對,所以MySQL5.7版本就將sql_mode默認值改為了嚴格模式,并且我們即便是用的MySQL5.6,也應該自行將其改為嚴格模式,而你記著,MySQL等等的這些數(shù)據(jù)庫,都是想把關于數(shù)據(jù)的所有操作都自己包攬下來,包括數(shù)據(jù)的校驗,其實好多時候,我們應該在自己開發(fā)的項目程序級別將這些校驗給做了,雖然寫項目的時候麻煩了一些步驟,但是這樣做之后,我們在進行數(shù)據(jù)庫遷移或者在項目的遷移時,就會方便很多,這個看你們自行來衡量。mysql除了數(shù)據(jù)校驗之外,你慢慢的學習過程中會發(fā)現(xiàn),它能夠做的事情還有很多很多,將你程序中做的好多事情都包攬了。

改為嚴格模式后可能會存在的問題:

若設置模式中包含了NO_ZERO_DATE,那么MySQL數(shù)據(jù)庫不允許插入零日期,插入零日期會拋出錯誤而不是警告。例如表中含字段TIMESTAMP列(如果未聲明為NULL或顯示DEFAULT子句)將自動分配DEFAULT '0000-00-00 00:00:00'(零時間戳),也或者是本測試的表day列默認允許插入零日期 '0000-00-00' COMMENT '日期';這些顯然是不滿足sql_mode中的NO_ZERO_DATE而報錯。

模式設置和修改(以解決上述問題為例):

方式一:

先執(zhí)行select @@sql_mode,復制查詢出來的值并將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然后執(zhí)行set sql_mode = '修改后的值'或者set session sql_mode='修改后的值';,例如:set session sql_mode='STRICT_TRANS_TABLES';改為嚴格模式

此方法只在當前會話中生效,關閉當前會話就不生效了。

方式二:

先執(zhí)行select @@global.sql_mode,復制查詢出來的值并將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然后執(zhí)行set global sql_mode = '修改后的值'。

此方法在當前服務中生效,重新MySQL服務后失效

方法三:在mysql的安裝目錄下,或my.cnf文件(windows系統(tǒng)是my.ini文件),新增

sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,

添加my.cnf如下:

[mysqld]

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

然后重啟mysql。

此方法永久生效.當然生產(chǎn)環(huán)境上是禁止重啟MySQL服務的,所以采用方式二加方式三來解決線上的問題,那么即便是有一天真的重啟了MySQL服務,也會永久生效了。

以上這篇mysql json格式數(shù)據(jù)查詢操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 最新mysql-5.7.21安裝和配置方法

    最新mysql-5.7.21安裝和配置方法

    這篇文章主要介紹了最新mysql-5.7.21安裝和配置方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • MySQL 綠色版安裝方法圖文教程

    MySQL 綠色版安裝方法圖文教程

    MySQL 綠色版安裝方法教程,需要的朋友可以參考下。
    2012-01-01
  • 關于MySQL?B+樹索引與哈希索引詳解

    關于MySQL?B+樹索引與哈希索引詳解

    索引是一種特殊的數(shù)據(jù)庫結構,被設計用來快速查詢數(shù)據(jù)庫表中的特定記錄,下面這篇文章主要給大家介紹了關于MySQL?B+樹索引與哈希索引的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 圖文詳解Mysql中如何查看Sql語句的執(zhí)行時間

    圖文詳解Mysql中如何查看Sql語句的執(zhí)行時間

    寫程序的人往往需要分析所寫的SQL語句是否已經(jīng)優(yōu)化過了,服務器的響應時間有多快,所以下面這篇文章主要給大家介紹了關于Mysql中如何查看Sql語句的執(zhí)行時間的相關資料,需要的朋友可以參考下
    2021-12-12
  • MySQL索引背后的數(shù)據(jù)結構及算法原理詳解

    MySQL索引背后的數(shù)據(jù)結構及算法原理詳解

    本文以MySQL數(shù)據(jù)庫為研究對象,討論與數(shù)據(jù)庫索引相關的一些話題。特別需要說明的是,MySQL支持諸多存儲引擎,而各種存儲引擎對索引的支持也各不相同,因此MySQL數(shù)據(jù)庫支持多種索引類型,如BTree索引,哈希索引,全文索引等等
    2016-12-12
  • MySQL將多條數(shù)據(jù)合并成一條的完整代碼示例

    MySQL將多條數(shù)據(jù)合并成一條的完整代碼示例

    我們在操作數(shù)據(jù)的時候,有時候需要把多行數(shù)據(jù),拼接成一行,下面這篇文章主要給大家介紹了關于MySQL將多條數(shù)據(jù)合并成一條的完整代碼示例,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • MySQL中的聚簇索引、非聚簇索引、聯(lián)合索引和唯一索引詳細介紹

    MySQL中的聚簇索引、非聚簇索引、聯(lián)合索引和唯一索引詳細介紹

    本文主要介紹了MySQL的索引類型,根據(jù)索引的存儲方式來劃分,索引可以分為聚簇索引和非聚簇索引。聚簇索引的特點是葉子節(jié)點包含了完整的記錄行,而非聚簇索引的葉子節(jié)點只有所以字段和主鍵ID,感興趣的同學可以閱讀本文
    2023-04-04
  • 經(jīng)測試最好用的mysql密碼忘記的解決方法

    經(jīng)測試最好用的mysql密碼忘記的解決方法

    經(jīng)測試最好用的mysql密碼忘記的解決方法...
    2007-06-06
  • 使用mysqldump如何實現(xiàn)數(shù)據(jù)庫表備份

    使用mysqldump如何實現(xiàn)數(shù)據(jù)庫表備份

    這篇文章主要介紹了使用mysqldump如何實現(xiàn)數(shù)據(jù)庫表備份方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2013-06-06
  • mysql group_concat()函數(shù)用法總結

    mysql group_concat()函數(shù)用法總結

    這篇文章主要介紹了mysql group_concat()函數(shù)用法,結合實例形式較為詳細的group_concat()函數(shù)的功能、使用方法與相關注意事項,需要的朋友可以參考下
    2016-06-06

最新評論

长子县| 大厂| 理塘县| 嘉兴市| 垫江县| 丹东市| 田林县| 金秀| 伊宁市| 安达市| 宁乡县| 潮州市| 若羌县| 鸡泽县| 温泉县| 共和县| 当雄县| 班戈县| 邵阳市| 温州市| 永和县| 平顺县| 宁南县| 临泉县| 富蕴县| 内乡县| 临猗县| 肃北| 岳池县| 新巴尔虎左旗| 龙井市| 枣强县| 古蔺县| 宁化县| 兴安盟| 岑溪市| 平罗县| 绥棱县| 汉源县| 阿克陶县| 辽阳市|