MySQL 기본 JSON 형식의 간단한 사용

2395 단어 mysql 최적화
MySQL 5.7+에서 원본 JSON을 지원하기 시작했습니다. JSON 형식의 내용을 삽입하고 검사할 수 있으며 내부 필드에 대한 단독 조회를 할 수 있습니다. JSON 내용의 JSON 형식을 추천합니다.
- 테이블 CREATE TABLEt(id int(11) DEFAULT NULL, info json DEFAULT NULL)을 작성합니다.
-- 검증INSERT INTOtid,info)VALUES(1,'name':'Jack','age': 28}'삽입)--삽입 성공 - INSERT INTOt(id,info)VALUES(2,'xxxx')-삽입 실패, Invalid JSON text
-- info에 있는name 필드 SELECTinfo만 조회->'$.name' FROM t WHERE id =1; -- Jack 주의, $.name의 따옴표는 생략할 수 없습니다. - 또는 SELECT jsonextract( info , '$.name') FROM t WHERE id =1; -- Jack
또한 JSON 내부의 필드에 대해 빈 열을 만들 수 있고, 빈 열의 값은 JSON의 내용에 따라 자동으로 업데이트되며, 일반 열처럼 조회(삽입과 업데이트는 불가), 색인을 만들 수 있습니다.허열 Alter TABLEt ADDusername varchar(10) GENERATED ALWAYS AS(info->'$.name') VIRTUAL;-- 또는 Alter TABLEtADDusernamevarchar(10)GENERATED ALWAYS AS(json extract(info,'$.name)) VIRTUAL;
-- 허열은 SELECTusernameFROMtWHEREid=1을 일반열처럼 조회할 수 있다.Jack
- JSON을 삽입할 때 자동으로 빈 열의 값인 INSERT INTOtid,infoVALUES(2,'{"name":"Lily", "age:26}")를 생성합니다.SELECT username FROM t WHERE id =2; -- Lily
-- JSON 콘텐츠를 변경하면 UPDATEt SETinfo='{"name": "Lucy", "age": 26}"WHEREid=2;SELECT username FROM t WHERE id =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) 시퀀스에 색인을 생성할 수 있습니다.
EXPLAIN SELECT * FROM t WHERE username ='Jack'; -- idxusername 이 인덱스
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | SIMPLE | t | NULL | ref | idx_username | idx_username | 33 | const | 1 | 100.00 | NULL |

좋은 웹페이지 즐겨찾기