mysql 5.7+ 開始支援原生json,可以對json格式的內容進行插入校驗,以及對其內部字段單獨查詢,推薦對json內容使用json格式。
-- 建立表
create tablet
(
id
int(11) default null,
info
json default null
);-- 插入校驗
insert intot
(id
,info
) values (1, ''); -- 插入成功
-- insert intot
(id
,info
) values (2, '******'); -- 插入失敗,invalid json text
-- 只查詢info裡面的name欄位
selectinfo
->'$.name' fromt
whereid
=1; -- jack 注意,$.name的引號不能省略
-- 或者
select json_extract(info
, '$.name') fromt
whereid
=1; -- jack
此外,可以對json內部的字段建立虛列,虛列的值可以根據json的內容自動更新,像普通列一樣查詢(但是不能插入和更新),以及建立索引。
-- 建立虛列
alter tablet
addusername
varchar(10) generated always as (info
->'$.name') virtual;
-- 或者 alter tablet
addusername
varchar(10) generated always as (json_extract(info
, '$.name)) virtual;
-- 虛列可以像普通列一樣查詢
selectusername
fromt
whereid
=1; -- jack
-- 插入json時,自動生成虛列的值
insert intot
(id
,info
) values (2, '');
selectusername
fromt
whereid
=2; -- lily
-- 更改json內容,虛列值自動更新
updatet
setinfo
='' whereid
=2;
selectusername
fromt
whereid
=2; -- lucy
-- 不允許更新虛列的值
-- updatet
setusername
='tom' whereid
=2; -- the value specified for generated column 'username' in table 't' is not allowed.
-- 可以給序列建立索引,就像普通列一樣
alter tablet
add indexidx_username
(username
);
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | extra |
| 1 | ****** | t | null | ref | idx_username | idx_username | 33 | const | 1 | 100.00 | null |
mysql5 7支援的原生態json格式
在mysql5.7中可以直接儲存json格式,並且可以對json資料進行讀取 如果要解析第乙個陣列成員請使用 json extract data,0 要搜尋用 json search data,one 關鍵字 或者json search data,all 關鍵字 第乙個是搜乙個,後面是搜出全部。se...
原生js格式化json和格式化xml的方法
在工作中一直看各位前輩的部落格解決各種問題,對我的幫助很大,非常感謝!之前一直比較忙沒有寫部落格,終於過年有了點空閒時間,可以把自己積累的東西分享下,筆記中的部分函式不是自己寫的,都是工作中一點點積累的,由於時間已久比較零散找不到對應的主人了,沒法註明出處還請見諒。我們經常遇到從後代拿到的沒有格式化...
MySQL 5 7的原生JSON資料型別使用
新增測試用表 create table lnmp id int 10 unsigned not null auto increment,category json,tags json,primary key id 新增資料 insert into lnmp category,tags values ...