mysql之使用json


從mysql 5.7開始才有

創建表(含有json類型)

 

CREATE TABLE `emp_details` (
`emp_no` int(11) NOT NULL,
`details` json DEFAULT NULL,
PRIMARY KEY (`emp_no`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

 

插入json

INSERT into emp_details (emp_no,details) VALUES ( '1','{"location":"IN","phone":"+15615645656",
"email":"abc@example.com","address":{"line1":"abc","line2":"xyz street","city":"Beijing"}}');

檢索json

SELECT emp_no,details->'$.address.city' city FROM emp_details; 或者 

SELECT emp_no,details->>'$.address.city' city FROM emp_details;

-> 查詢結果有引號

->> 查詢結果無引號

json函數

查找

SELECT emp_no FROM emp_details WHERE details->>'$.address.city' = 'Beijing';

 

也可以使用json_contains函數查詢數據,如果找到了數據,則返回1,否則返回0

SELECT json_contains(details->'$.address.line1','"abc"') FROM emp_details

 

查找一個key,這里one表示至少存在一個鍵,如果找到了數據,則返回1,否則返回0

SELECT json_contains_path(details,'one','$.address.city') FROM emp_details

 

 SELECT json_contains_path(details,'one','$.address.city','$.address.cit') FROM emp_details

我的數據沒有address.cit這個鍵,但是有address.city,所有返回1

 

當然,如果要檢查是否同時存在,則可以把one換成all

 

 修改

json_set:替換現有值並添加不存在的值

 UPDATE emp_details SET details = json_set(details,"$.address.line1","abcd","$.nickname","kai")

json_insert:不能替換現有值,可以添加不存在的值

json_replace:僅替換現有值

 刪除

json_remove

UPDATE emp_details SET details=json_remove(details,"$.nickname") WHERE emp_no = 1

仍然用update!

其他函數

json_keys:獲取所有鍵

 SELECT json_keys(details) FROM emp_details WHERE emp_no = 1

json_length:獲取所有鍵的數量

SELECT json_length(details) FROM emp_details WHERE emp_no = 1

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM