MySQL 기본 JSON 형식의 간단한 사용
2395 단어 mysql 최적화
- 테이블 CREATE TABLE
t
(id
int(11) DEFAULT NULL, info
json DEFAULT NULL)을 작성합니다.-- 검증INSERT INTO
t
id
,info
)VALUES(1,'name':'Jack','age': 28}'삽입)--삽입 성공 - INSERT INTOt
(id
,info
)VALUES(2,'xxxx')-삽입 실패, Invalid JSON text-- info에 있는name 필드 SELECT
info
만 조회->'$.name' FROM t
WHERE id
=1; -- Jack 주의, $.name의 따옴표는 생략할 수 없습니다. - 또는 SELECT jsonextract( info
, '$.name') FROM t
WHERE id
=1; -- Jack 또한 JSON 내부의 필드에 대해 빈 열을 만들 수 있고, 빈 열의 값은 JSON의 내용에 따라 자동으로 업데이트되며, 일반 열처럼 조회(삽입과 업데이트는 불가), 색인을 만들 수 있습니다.허열 Alter TABLE
t
ADDusername
varchar(10) GENERATED ALWAYS AS(info
->'$.name') VIRTUAL;-- 또는 Alter TABLEt
ADDusername
varchar(10)GENERATED ALWAYS AS(json extract(info
,'$.name)) VIRTUAL; -- 허열은 SELECT
username
FROMt
WHEREid
=1을 일반열처럼 조회할 수 있다.Jack - JSON을 삽입할 때 자동으로 빈 열의 값인 INSERT INTO
t
id
,info
VALUES(2,'{"name":"Lily", "age:26}")를 생성합니다.SELECT username
FROM t
WHERE id
=2; -- Lily -- JSON 콘텐츠를 변경하면 UPDATE
t
SETinfo
='{"name": "Lucy", "age": 26}"WHEREid
=2;SELECT username
FROM t
WHERE id
=2; -- Lucy -- 허열의 값인 UPDATE
t
SETusername
='Tom'WHEREid
= 2를 업데이트할 수 없습니다.The value specified for generated column 'username' in table 't' is not allowed. - 일반 열처럼 ALTER TABLE
t
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 |