亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

預(yù)設(shè)表名是 base_data , json列名是 json_value

json_value的值是

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

那么查詢(xún)語(yǔ)句應(yīng)該是

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ū)別暫時(shí)還不得而知

補(bǔ)充知識(shí):mysql中varchar字段長(zhǎng)度超過(guò)限制長(zhǎng)度自動(dòng)截取的問(wèn)題-----MySQL的sql_mode模式說(shuō)明及設(shè)置

MySQL的sql_mode合理設(shè)置

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

sql model 常用來(lái)解決下面幾類(lèi)問(wèn)題

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

(2) 通過(guò)設(shè)置sql model 為寬松模式,來(lái)保證大多數(shù)sql符合標(biāo)準(zhǔn)的sql語(yǔ)法,這樣應(yīng)用在不同數(shù)據(jù)庫(kù)之間進(jìn)行遷移時(shí),則不需要對(duì)業(yè)務(wù)sql 進(jìn)行較大的修改。

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

sql_mode常用值如下:

ONLY_FULL_GROUP_BY:

對(duì)于GROUP BY聚合操作,如果在SELECT中的列,沒(méi)有在GROUP BY中出現(xiàn),那么這個(gè)SQL是不合法的,因?yàn)榱胁辉贕ROUP BY從句中

NO_AUTO_VALUE_ON_ZERO:

該值影響自增長(zhǎng)列的插入。默認(rèn)設(shè)置下,插入0或NULL代表生成下一個(gè)自增長(zhǎng)值。如果用戶(hù) 希望插入的值為0,而該列又是自增長(zhǎng)的,那么這個(gè)選項(xiàng)就有用了。

STRICT_TRANS_TABLES:

在該模式下,如果一個(gè)值不能插入到一個(gè)事務(wù)表中,則中斷當(dāng)前的操作,對(duì)非事務(wù)表不做限制

NO_ZERO_IN_DATE:

在嚴(yán)格模式下,不允許日期和月份為零

NO_ZERO_DATE:

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

ERROR_FOR_DIVISION_BY_ZERO:

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

NO_AUTO_CREATE_USER:

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

NO_ENGINE_SUBSTITUTION:

如果需要的存儲(chǔ)引擎被禁用或未編譯,那么拋出錯(cuò)誤。不設(shè)置此值時(shí),用默認(rèn)的存儲(chǔ)引擎替代,并拋出一個(gè)異常

PIPES_AS_CONCAT:

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

ANSI_QUOTES:

啟用ANSI_QUOTES后,不能用雙引號(hào)來(lái)引用字符串,因?yàn)樗唤忉尀樽R(shí)別符

ORACLE的sql_mode設(shè)置等同:

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

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

在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默認(rèn)的sql_mode模式參數(shù)是不一樣的,5.6的mode是NO_ENGINE_SUBSTITUTION,其實(shí)表示的是一個(gè)空值,相當(dāng)于沒(méi)有什么模式設(shè)置,可以理解為寬松模式。5.7的mode是STRICT_TRANS_TABLES,也就是嚴(yán)格模式。

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

改為嚴(yán)格模式后可能會(huì)存在的問(wèn)題:

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

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

方式一:

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

此方法只在當(dāng)前會(huì)話中生效,關(guān)閉當(dāng)前會(huì)話就不生效了。

方式二:

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

此方法在當(dāng)前服務(wù)中生效,重新MySQL服務(wù)后失效

方法三:在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。

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

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

相關(guān)文章

  • MySQL入門(mén)(五) MySQL中的索引詳講

    MySQL入門(mén)(五) MySQL中的索引詳講

    之前寫(xiě)到MySQL對(duì)表的增刪改查(查詢(xún)最為重要)后,就感覺(jué)MySQL就差不多學(xué)完了,沒(méi)有想繼續(xù)學(xué)下去的心態(tài)了,原因可能是由于別人的影響,覺(jué)得對(duì)于MySQL來(lái)說(shuō),知道了一些復(fù)雜的查詢(xún),就夠了
    2018-07-07
  • MySQL數(shù)據(jù)庫(kù)中遇到no?database?selected問(wèn)題解決辦法

    MySQL數(shù)據(jù)庫(kù)中遇到no?database?selected問(wèn)題解決辦法

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)中遇到no?database?selected問(wèn)題的解決辦法,這是MySQL數(shù)據(jù)庫(kù)的錯(cuò)誤提示,意思是沒(méi)有選擇數(shù)據(jù)庫(kù),在使用MySQL命令行操作時(shí)需要先選擇要操作的數(shù)據(jù)庫(kù),否則就會(huì)出現(xiàn)這個(gè)錯(cuò)誤,需要的朋友可以參考下
    2024-03-03
  • MySQL實(shí)戰(zhàn)記錄之如何快速定位慢SQL

    MySQL實(shí)戰(zhàn)記錄之如何快速定位慢SQL

    這可能是困然很多人的一個(gè)問(wèn)題,MySQL通過(guò)慢查詢(xún)?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的SQL語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于MySQL實(shí)戰(zhàn)記錄之如何快速定位慢SQL的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 簡(jiǎn)單了解mysql mycat 中間件

    簡(jiǎn)單了解mysql mycat 中間件

    這篇文章主要介紹了簡(jiǎn)單了解mysql mycat 中間件,一個(gè)徹底開(kāi)源的,面向企業(yè)應(yīng)用開(kāi)發(fā)的大數(shù)據(jù)庫(kù)集群支持事務(wù)、ACID、可以替代MySQL的加強(qiáng)版數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2019-06-06
  • 使用MySQL MySqldump命令導(dǎo)出數(shù)據(jù)時(shí)的注意事項(xiàng)

    使用MySQL MySqldump命令導(dǎo)出數(shù)據(jù)時(shí)的注意事項(xiàng)

    這篇文章主要介紹了使用MySQL MySqldump命令導(dǎo)出數(shù)據(jù)時(shí)的注意事項(xiàng),很實(shí)用的經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下
    2014-07-07
  • Mysql 分批加索引的詳細(xì)方法

    Mysql 分批加索引的詳細(xì)方法

    文章主要介紹了在生產(chǎn)環(huán)境中為千萬(wàn)級(jí)數(shù)據(jù)表分批次創(chuàng)建索引的策略和方法,包括使用臨時(shí)表、分區(qū)表、ONLINE選項(xiàng)、分批ALTER TABLE、pt-online-schema-change工具等,并提供了詳細(xì)的步驟和注意事項(xiàng),感興趣的朋友一起看看吧
    2024-12-12
  • MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    日期時(shí)間處理對(duì)大家來(lái)說(shuō)應(yīng)該都不陌生了,下面這篇文章主要給大家介紹了關(guān)于MySQL常用的日期時(shí)間函數(shù),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MySQL中select語(yǔ)句介紹及使用示例

    MySQL中select語(yǔ)句介紹及使用示例

    數(shù)據(jù)表都已經(jīng)創(chuàng)建起來(lái)了,我們就可以用自己喜歡的方式對(duì)數(shù)據(jù)表里面的信息進(jìn)行檢索和顯示了,下面為大家講解下MySQL中select語(yǔ)句的應(yīng)用,感興趣的碰可以學(xué)習(xí)下
    2013-07-07
  • 一文搞懂MySQL索引所有知識(shí)點(diǎn)

    一文搞懂MySQL索引所有知識(shí)點(diǎn)

    這篇文章主要帶你搞懂MySQL索引的所有知識(shí)點(diǎn),我們通常所說(shuō)的索引,包括聚焦索引、覆蓋索引、組合索引、前綴索引、唯一索引等,沒(méi)有特別說(shuō)明,默認(rèn)都是使用B+樹(shù)結(jié)構(gòu)組織,感興趣的小伙伴可以參考閱讀
    2023-03-03
  • 查看mysql當(dāng)前連接數(shù)的方法詳解

    查看mysql當(dāng)前連接數(shù)的方法詳解

    這篇文章主要介紹了查看mysql當(dāng)前連接數(shù)的方法詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論