select * from t where js->'$.a'=100
避免了要将所有记录都读取出来,在客户端进行过滤。
2.可以直接update,而无须先读取
update t set js=json_set(js,'$.a',js->'$.a'+1) where id=1
单条原子更新
update t,t1 set t.js=json_merage(t.js,t1.js) where t.id=t1.id
跨表更新
3.可以在一条SQL中完成多条纪录的修改!
update t set js=json_set(js,'$.a',123) where id in(1,2)
没有原生的支持,这个是很难实现的。
4.通过json类型,完美的实现了表结构的动态变化
除了一般意义上的增加表字段,还包括嵌套其他对象与数组
update t set js=json_array_append(js,'$.sonAry',123) where id =1
增加一个子节点到sonAry中,无须子表。
5.通过计算生成列在json上建立索引
CREATE TABLE j1 (
id int(11) NOT NULL,
js json NOT NULL,
s varchar(45) CHARACTER SET utf8mb4 NOT NULL,
a int(11) GENERATED ALWAYS AS (json_extract(js,'$.a')) STORED,
PRIMARY KEY (id),
KEY i_a (a)
)
通过a这个生成列(json_extract(js,'$.a'))上建立索引,
可以利用mysql的索引来快速定位。
json_extract还可利用path的通配符,发掘更多类型索引。
甚至还可利用JSON_CONTAINS/JSON_CONTAINS_PATH来建立索引。
这里可以组合出很多
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)