mysql5.7 json

项目需求,某字段需要存储json字符串,便于操作,选择了mysql5.7刚出不久的json.
要求:
1.php版本 5.6.9以上 (果断换成了php7)
2.mysql 5.7.*
新特性:
mysql 除了原来的字段类型 int,varchar, text ……以外,有了json类型
这里写图片描述
我们可以根据需求对json字符串中的某一个字段进行操作
例如表 user:
这里写图片描述

一个简单的json串:

{
    "mail":"[email protected]",
    "name":"1111",
    "address":"Shangahai"
}

我们可以灵活的取出json字符串中的某个字段当做数据表中的字段灵活的操作
增加
数据(添加的必须是json字符串,不是则会报错)
正常的添加sql
查询
取出info中的name

select uid,json_extract(info,'$.name') as name from user

这里写图片描述

/**
yii2.0 中
*/
$model = User::findOne(["JSON_EXTRACT(info,'$.name')" => 'Amy']);

删除

update user set info = json_remove(info,'$.name') where json_extract(info,'$.name') = 'Amy'

修改

update user set info = json_replace(info,'$.name',"1111") where json_extract(info,'$.name') = 'David'

json_replace(json字段,json中小字段,最后改的值)

当json字符串是json数组时
eg:

{  
    "programmers": [{  
        "firstName": "Brett",  
        "lastName": "McLaughlin",  
        "email": "aaaa"  
    }, {  
        "firstName": "Jason",  
        "lastName": "Hunter",  
        "email": "bbbb"  
    }, {  
        "firstName": "Elliotte",  
        "lastName": "Harold",  
        "email": "cccc"  
    }],  
    "authors": [{  
        "firstName": "Isaac",  
        "lastName": "Asimov",  
        "genre": "sciencefiction"  
    }, {  
        "firstName": "Tad",  
        "lastName": "Williams",  
        "genre": "fantasy"  
    }, {  
        "firstName": "Frank",  
        "lastName": "Peretti",  
        "genre": "christianfiction"  
    }],  
    "musicians": [{  
        "firstName": "Eric",  
        "lastName": "Clapton",  
        "instrument": "guitar"  
    }, {  
        "firstName": "Sergei",  
        "lastName": "Rachmaninoff",  
        "instrument": "piano"  
    }]  
}

查询json数组里某一个字段:

SELECT json_extract(person_desc,'$.programmers[0].email') from json_test

猜你喜欢

转载自blog.csdn.net/huojiahui22/article/details/53930312