如何 (crud) 在 mysql 5.7 json 列上插入 select 更新删除

how to (crud) insert select update delete on mysql 5.7 json column

为了记录用户 mac_address 并计数 mac_address 以重新启动用户登录的 pc 或笔记本电脑以控制用户可用的最大值(它的工作):

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

所以我试试 Step:01 创建 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 ;

步数:02

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

步骤:03(命令没有错误但没有插入新值)

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

希望 在执行 sql (Step02) 命令后,它会使 auth_list 列的值结果像

{"mac": "b0fc361479de"}

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

顺便说一下

  1. Select sql 用于 json 列的命令?可以作为例子吗?
    如果我想检查 mac 值是否存在 'c84wr8492eda' (获取计数)
  2. 为 json 列更新 sql 命令(替换)?可以作为例子吗?
    如果我想 mac 值是 'c84wr8492eda' 的地方是 'aaaabbbbcccc'
  3. 删除 json 列的 sql 命令?可以作为例子吗? 如果我想删除 mac 值为 'c84wr8492eda'
  4. 的项目

q1:试试这样的:

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

q2:我认为您想在步骤 03 中使用 JSON_ARRAY_APPEND 而不是 JSON_INSERT。

q3:您是要删除整个记录还是只删除数组中的条目?请仔细阅读https://dev.mysql.com/doc/refman/8.0/en/json-modification-functions.html