如何 (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"]}
顺便说一下
- Select sql 用于 json 列的命令?可以作为例子吗?
如果我想检查 mac 值是否存在 'c84wr8492eda' (获取计数)
- 为 json 列更新 sql 命令(替换)?可以作为例子吗?
如果我想 mac 值是 'c84wr8492eda' 的地方是 'aaaabbbbcccc'
- 删除 json 列的 sql 命令?可以作为例子吗?
如果我想删除 mac 值为 'c84wr8492eda'
的项目
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
为了记录用户 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"]}
顺便说一下
- Select sql 用于 json 列的命令?可以作为例子吗?
如果我想检查 mac 值是否存在 'c84wr8492eda' (获取计数) - 为 json 列更新 sql 命令(替换)?可以作为例子吗?
如果我想 mac 值是 'c84wr8492eda' 的地方是 'aaaabbbbcccc' - 删除 json 列的 sql 命令?可以作为例子吗? 如果我想删除 mac 值为 'c84wr8492eda' 的项目
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