我在MySQl表中有一个JSON类型的列。此列存储一个整数值数组,如'[1,2,3]'。
我想要的是:当我使用JSON_ARRAY_INSERT / JSON_ARRAY_APPEND将新值插入此数组时,如果该值已存在,则忽略它。
我如何在MySQL中执行此操作?也就是说,不检查调用PHP或Node.js等脚本的重复项。
更新:我更倾向于为此目的使用内置的MySQL机制,因为如果在外部脚本中完成,由于竞争条件会发生重复的可能性很小,即使我在存储之前检查重复项数据。
谢谢!
答案 0 :(得分:1)
如果不知道您的确切表结构,很难给出准确的答案,但以下查询说明了它是如何使用变量完成的。您只需根据列进行调整即可。
set @j='["1","2","3"]';
set @v = "4";
select ifnull(json_search(@j, 'one', @v), @j:=json_array_append(@j, '$', @v));
set @v = "1";
select ifnull(json_search(@j, 'one', @v), @j:=json_array_append(@j, '$', @v));
select @j;
输出:
["1", "2", "3", "4"]
答案 1 :(得分:0)
希望这会有所帮助。
模式(MySQL v5.7)
CREATE TABLE test (
id INT,
js JSON
);
INSERT INTO test (id, js) VALUES (1, '[1,2,3]');
INSERT INTO test (id, js) VALUES (2, '[1,2]');
查询#1
select * from test;
| id | js |
| --- | --------- |
| 1 | [1, 2, 3] |
| 2 | [1, 2] |
查询#2
UPDATE test
SET js = JSON_ARRAY_APPEND (js, '$', 3)
WHERE id = 1 and not JSON_CONTAINS(js, '3', '$');
UPDATE test
SET js = JSON_ARRAY_APPEND (js, '$', 3)
WHERE id = 2 and not JSON_CONTAINS(js, '3', '$');
查询#3
select * from test;
| id | js |
| --- | --------- |
| 1 | [1, 2, 3] |
| 2 | [1, 2, 3] |