如何(crud)在mysql 5.7json列上插入select update delete

cgvd09ve  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(220)

为了记录用户的mac\u地址并计算mac\u地址以恢复用户登录的pc或笔记本以控制用户可用的最大值,例如(它是工作的):

SELECT JSON_LENGTH(auth_list->'$.mac') FROM users WHERE username='admin'

所以我试着step:01 create table

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `username` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'username',
  `auth_list` json DEFAULT NULL COMMENT 'mac address list',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

step:02

INSERT INTO users ( username,auth_list )
VALUES('admin','{"mac":["b0fc361479de"]}')

step:03 (命令无错误,但不插入新值)

UPDATE users SET auth_list = JSON_INSERT(auth_list , '$.mac','c84wr8492eda') WHERE username='admin'

我希望在执行sql(step02)命令后,它将使auth\ u list列的值结果像

{"mac": "b0fc361479de"}

{"mac": ["b0fc361479de","c84wr8492eda"]}

顺便说一句
选择json列的sql命令?可以举个例子吗?
如果我想检查mac值是否存在'c84wr8492eda'(get count)
更新json列的sql命令(替换)?可以举个例子吗?
如果我想把mac值为'c84wr8492eda'的地方改为'aaaabbccc'
删除json列的sql命令?可以举个例子吗?如果要删除mac值为“c84wr8492eda”的项

0s7z1bwu

0s7z1bwu1#

问题1:尝试以下方法:

MySQL [localhost+ ssl/test] SQL> select json_contains(auth_list,js
r8492eda'),'$.mac') from users;
+-------------------------------------------------------------+
| json_contains(auth_list,json_quote('c84wr8492eda'),'$.mac') |
+-------------------------------------------------------------+
|                                                           1 |
+-------------------------------------------------------------+

问题2:我认为您希望在步骤03中使用json_array_append而不是json_insert。
问题3:您想完全删除记录还是只删除数组中的条目?请细读https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html

相关问题