使ç¨MySQLèæå(virtual columns)为Jsonæ°æ®ç±»åå建索å¼
å建表
CREATE TABLE user_info (
uid INT auto_increment,
DATA json,
PRIMARY KEY(uid)
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
æå ¥æ°æ®
insert into user_info values (NULL,'{"name":"zhangsan","address":"beijing"}');
insert into user_info values (NULL,'{"name":"wanger","address":"tianjing"}');
æå»ºå§åçèæå
æ¹æ³1ï¼
alter table user_info add v_name varchar(20) generated always as (JSON_EXTRACT(data,'$.name'));
æ¹æ³2ï¼
alter table user_info add v_name varchar(20) generated always as (data->'$.name');
æå»ºç´¢å¼
alter table user_info add index idx_name(v_name);
使ç¨å¦ä¸æ¥è¯¢è¯å¥
SELECT * FROM user_info WHERE v_name='zhangsan';

å¹¶ä¸è½æ¥è¯¢å°ç»æï¼é使ç¨
SELECT * FROM user_info WHERE v_name='"zhangsan"';
æ¹å¯æ¥è¯¢å°ç»æã
ç±æ¤å¯ä»¥ç¥éæå»ºçèæåä¸çæ°æ®å¤äº
""
,é£ä¹å¦ä½å»æå¢
alter table user_info modify column v_name varchar(20) generated always as (JSON_UNQUOTE(data->'$.name')) VIRTUAL;
æå»ºå°åèæåå¹¶å建索å¼
æå»ºèæåï¼
alter table user_info add v_address varchar(20) generated always as (JSON_UNQUOTE(data->'$.address'));
å建索å¼ï¼
alter table user_info add index idx_user_info(v_name,v_address);
妿¤æ¥è¯¢è¯å¥å¯ä»¥æ£å¸¸ä½¿ç¨ç´¢å¼ï¼æ¥è¯¢ä¸æ®é表æ å¼ã
æ¤æ¶çè¡¨ç»æç±äºå¤äº
v_nameå
v_addressè¿ä¸¤ä¸ªèæåï¼åæå ¥å«çæ°æ®éè¦æææå ¥å
(ä¸è½ç»èæåæå ¥æ°æ®)insert into user_info(data) values ('{"name":"lisi","address":"sichuan"}');
éè¦æ³¨æï¼ä¸è½å»ºç«èæåä¸çå®åçç»åç´¢å¼ã