mysql操作 json 陣列 的增刪該查

2021-10-24 11:24:37 字數 3111 閱讀 8417

前言,型別必須是json,雖然text也可以,但是很多操作沒法使用,比如查詢,當然了,這種型別還可以儲存陣列

類似 varchar,設定 json 主要將字段的 type 是 json, 不能設定長度,可以是 null 但不能有預設值。

就是插入 json 格式的字串,可以是物件的形式,也可以是陣列的形式

insert

into `a_goods` (`type`, `attrs`)

values

('["新品","熱銷",1,"0"]',''

)

mysql 也有專門的函式json_objectjson_array生成 json 格式的資料,但是吧,使用的時候有注意點,盡量之間寫進去吧

//json_object必須是偶數,巢狀時必須搭配json_array

insert

into `a_goods` (`attrs`, `type`)

values

(json_object

("name"

,"張三"

,"age",20

,"strage"

,"20"

,"data"

,json_array

("新品"

,"熱銷",1

,"0"))

,json_array

("新品"

,"熱銷",1

,"0"

))

一般對應字串型別的 category->』$.name』 中還包含著雙引號,這其實並不是想要的結果,可以用 json_unquote 函式將雙引號去掉,從 mysql 5.7.13 起也可以通過這個操作符* ->> *這個和 json_unquote 是等價的

查詢json的值,即鍵的值

select attrs-

>

'$.name'

as name,

json_unquote

(attrs-

>

'$.name'

), attrs-

>

>

'$.name'

from a_goods

/* select

attrs->'$.name' as name, 查詢json資料中的name的值並賦值給name

json_unquote(attrs->'$.name'),

attrs->>'$.name'

from a_goods

*/

json中的where 語句

select

*from a_goods where type =

cast

('["新品","熱銷",1,"0"]'

asjson

)//查詢json是否在資料庫的存在,其實就相當於 `where a=1` 只不過這個a得轉換一下

//cast函式用於將某種資料型別的表示式顯式轉換為另一種資料型別

select

*from a_goods where attrs-

>

>

'$.age'

='20'

//要特別注意的是,json 中的元素搜尋是嚴格區分變數型別的,比如說整型和字串是嚴格區分的,即 「20」和20

select

*from a_goods where

json_contains

(attrs,

'20'

,'$.age'

)select

*from a_goods where

json_contains

(type,

'"新品"'

)//用json_contains 函式,但和 *column->path *的形式有點相反的是,json_contains 第二個引數是不接受整數的,無論 json 元素是整型還是字串,否則會出現錯誤

更新陣列按以往的更新就行

update a_goods set type =

'["demo","0",1]'

但如果要更新 json 下的元素,mysql 並不支援 *column->path *的形式,則可能要用到以下幾個函式

json_insert()插入新值,但不會覆蓋已經存在的值

update a_goods set category =

json_insert

(category,

'$.name'

,'lnmp'

,'$.url'

,'www.lnmp.cn'

)where id =

1;

json_set()插入新值,並覆蓋已經存在的值

update a_goods set category =

json_set

(category,

'$.host'

,'www.lnmp.cn'

,'$.url'

,'')where id =

1;

json_replace()只替換存在的值

update a_goods set category =

json_replace

(category,

'$.name'

,'php'

,'$.url'

,'')where i

json_remove()刪除 json 元素

update a_goods set category =

json_remove

(category,

'$.url'

,'$.host'

)where id =

1;

js對json陣列的操作 查 刪 改 增

1 json陣列 var persons 2 根據物件屬性值得到相應物件 1.獲取 name 等於 lily 的物件 var lily persons.filter p console.log lily 列印結果 注 filter 方法返回的是乙個陣列 var twins persons.filte...

JSON陣列操作

我們首先定義乙個json陣列物件如下 var persons 一.根據物件屬性值得到相應物件 1.獲取 name 等於 lily 的物件 var lily persons.filter p console.log lily 列印結果 注 filter 方法返回的是乙個陣列 var twins per...

mysql解析json 陣列

mysql在5.7開始支援json解析了 也可以解析陣列哦!直接上demo select substr col,2,length col 2 length col from select json extract json extract json extract state,tpl items 0...