Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL在触发器中插入json类型中的多个变量_Mysql_Json - Fatal编程技术网

MySQL在触发器中插入json类型中的多个变量

MySQL在触发器中插入json类型中的多个变量,mysql,json,Mysql,Json,我使用的是MySQL 5.7.9,因此它支持内部JSON类型。我创建了一个“插入后”触发器,将相对数据从一个表插入到B表中,该相对数据是表A中的JSON格式数据。我可以在while循环中分别解析该数据并将其插入B。 我的问题是如何使用insert语句(如insert into values(x,x),(y,y)…)来执行此insert事件。。。因为它是高效率的 set @jsonO := CAST(NEW.targets AS JSON); set @targetLen := JSON_LE

我使用的是
MySQL 5.7.9
,因此它支持内部JSON类型。我创建了一个“插入后”触发器,将相对数据从一个表插入到B表中,该相对数据是表A中的JSON格式数据。

我可以在while循环中分别解析该数据并将其插入B。 我的问题是如何使用insert语句(如insert into values(x,x),(y,y)…)来执行此insert事件。。。因为它是高效率的

 set @jsonO := CAST(NEW.targets AS JSON);
 set @targetLen := JSON_LENGTH(@jsonO);
 set valueStr = NULL;
 set target = 0;
 while target < @targetLen do
   set valueStr = CONCAT_WS(',',valueStr,CONCAT('(',JSON_EXTRACT(NEW.targets,CONCAT('$[',target,']')) ,NEW.id,')'));
   #insert into user_info(userid,infoid) values(JSON_EXTRACT(NEW.targets,CONCAT('$[',target,']')),NEW.id);
   #!!! INSERT INTO SINGLE ROW IS OK BUT IS INEFFICIENCY
   set target = target + 1;
 end while;
 insert into user_info(userid,infoid) values ???; 
set@jsonO:=CAST(NEW.targets为JSON);
设置@targetLen:=JSON_长度(@jsonO);
设置valueStr=NULL;
设定目标=0;
而target<@targetLen do
设置valueStr=CONCAT_-WS(',',valueStr,CONCAT('(',JSON_-EXTRACT(NEW.targets,CONCAT('$[',target']),NEW.id'));
#在user_info(userid,infoid)值(JSON_EXTRACT(NEW.targets,CONCAT(“$[”,target,”])、NEW.id)中插入;
#!!! 插入到单行是可以的,但效率低下
设定目标=目标+1;
结束时;
插入用户信息(userid,infoid)值???;

我的问题是如何使用一个变量一次插入多行。

下面是一个示例,您可以将相同的示例用于自己的

有点晚了,但是使用prepared语句怎么样

在循环中构建查询字符串(准备阶段),并在循环后执行

我还没试过


谢谢。我认为MySQLLi是PHP和mysql之间的连接器库。我想知道如何在触发器中实现这一点,而不是使用PHP、Java、Ruby或其他任何语言。实际上,我想知道是否有一种方法可以使用变量替换insert语句中的整个“values”部分。