mysql json函式使用場景分析

2021-10-11 02:00:14 字數 2674 閱讀 9092

官方文件:

軟體版本:mysql5.7

從5.7開始,mysql提供了一些查詢、操作的json函式,這些函式不僅僅可作用於json型別的字段,而且能支援text型別,只要保證是json字串。只是如果text欄位中含有不是json格式的字串,mysql就直接報錯,直接異常反饋是專案中接受不了的,另一方面,缺乏json內多級的查詢功能,所以json函式顯得有點雞肋,很多開發更願意在業務層操作json串,以便於丟擲具體的異常提示。

在8出世之後,有一條重要的更新就是json增強,在此json的存在意義就像mongodb的document巢狀document,很明顯mysql想用json來相容nosql,或者說借用nosql的優點。然後什麼場景比較適合使用mysql的json呢。

案例:學生分數排行

資料準備:

set names utf8mb4;

set foreign_key_checks = 0;

create table `student` (

`id` int(11) not null auto_increment,

`student_name` varchar(36) default null,

primary key (`id`)

) engine=innodb auto_increment=5 default charset=utf8;

begin;

insert into `student` values (1, '黃大');

insert into `student` values (2, '李二');

insert into `student` values (3, '韓三');

insert into `student` values (4, '馮四');

commit;

set foreign_key_checks = 1;

set names utf8mb4;

set foreign_key_checks = 0;

create table `score2` (

`id` int(11) not null auto_increment,

`student_id` int(11) default null,

`grade` int(8) default null,

`subject` varchar(36) default null,

`score` smallint(4) default null,

primary key (`id`)

) engine=innodb auto_increment=13 default charset=utf8;

-- ----------------------------

-- records of score2

-- ----------------------------

begin;

insert into `score2` values (1, 1, 1, 'maths', 90);

insert into `score2` values (2, 1, 1, 'english', 60);

insert into `score2` values (3, 1, 1, 'language', 55);

insert into `score2` values (4, 1, 1, 'physic', 100);

insert into `score2` values (5, 2, 1, 'maths', 90);

insert into `score2` values (6, 2, 1, 'english', 60);

insert into `score2` values (7, 2, 1, 'language', 65);

insert into `score2` values (8, 2, 1, 'physic', 100);

insert into `score2` values (9, 2, 2, 'maths', 90);

insert into `score2` values (10, 2, 2, 'english', 60);

insert into `score2` values (11, 2, 2, 'language', 65);

insert into `score2` values (12, 2, 2, 'physic', 100);

commit;

set foreign_key_checks = 1;

總分排行及其各科成績組成:

還有。。。。一時間想不到了,上面說的那種情況也是可以用一對多的記錄方式來儲存,所以說當前在下覺得除非是舊專案二次開發,針對已有的資料結構可能會用到,新專案新資料結構就顯得很雞肋了。歡迎大佬有新的想法來之指正。

Git使用場景 命令使用場景

通過個人使用git時候的遇到的使用場景,熟悉了解相關命令,也記錄一下場景的使用方法。所有場景均在ubuntu16.04 linux 作業系統下,其他作業系統有差異的地方自行查閱相關資料。安裝git sudo apt get install git設定及檢視git配置 user.name和user.e...

kotlin標準函式使用場景

isantialias true isdither true style paint.style.fill and stroke strokewidth 6.0f 而這時要用let,則需要傳入引數it,並且返回出去,就顯得冗餘 let使用場景 在空判斷時 var paint2 paint let在有...

mongodb 使用場景和不使用場景

1.mongodb介紹 mongodb 名稱來自 humongous 是乙個可擴充套件的高效能,開源,模式自由,面向文件的資料庫。它使用c 編寫。mongodb特點 a.面向集合的儲存 適合儲存物件及json形式的資料。b.動態查詢 mongo支援豐富的查詢表達方式,查詢指令使用json形式的標記,...