mysql中的数组变量

Posted

技术标签:

【中文标题】mysql中的数组变量【英文标题】:Array variable in mysql 【发布时间】:2010-11-28 20:54:56 【问题描述】:

有没有办法在 mysql 脚本中声明一个数组(或任何集合)并循环它来做事?

例如,

SET @myArrayOfValue=[2,5,2,23,6]


for each @value in @myArrayOfValue
   INSERT INTO EXEMPLE VALUES(@value, 'hello');
end for each

【问题讨论】:

您希望在哪些可能的实际情况下执行此操作?如果数组来自 SELECT 语句,那么您应该只插入 ... SELECT。如果数组来自您的应用程序,那么您应该 INSERT INTO EXEMPLE VALUES (@value, 2), (@value,5), (@value,2) ... 我只是想做一个维护脚本来增加新的价值。我不想对每个插入进行复制粘贴,而是想在脚本的开头创建一个列表。人们不必阅读所有脚本即可知道要修改什么,而只需阅读开头的变量即可。 @longneck,询问此页面上的 16,000 名访问者以及 ***.com/q/12176709/632951 上的 67,000 名访问者,了解您可以这样做的真实情况。 怎么到了 2020 年,mySQL 仍然没有像数据数组这样简单的东西供程序员在他们的存储过程中使用?不要误会,我很喜欢 mySQL 支持 JSON,但即使访问 JSON 中的数组也非常很笨重。 【参考方案1】:

不,SQL 不支持 FOR EACH/etc 语法。您最接近的是使用游标。此外,SQL 中没有数组语法 - 您必须使用:

SELECT 2 FROM DUAL
UNION ALL
SELECT 34 FROM DUAL
UNION ALL 
SELECT 24 FROM DUAL

... 在 SQL 中构造等效的“值数组”。

SQL 脚本会有单独的 INSERT 语句。您会考虑使用 php/Java/等。使用您的示例中提供的 FOR 循环式语法。

【讨论】:

我不介意使用游标,但值需要来自类似这样的 SET @myValues [2,34,22]。谢谢 谢谢,这就是我要找的。语法太难看,但它回答了我的问题。【参考方案2】:

你能用MySQL SET之类的东西吗?您可以将值存储在 SET 中,而不是循环遍历。

【讨论】:

不,我不能,我需要在不同的行中插入值。我想这样做是为了有一个易于使用的脚本。 使用 PHP(或其他东西)并循环遍历每个数组,然后进行简单的插入 值的格式是什么? CSV、文本文件等...? 来自脚本开头的用户编辑。所以是mysql格式的。 仅供参考 @PhillPafford:您与 MySQL SET 的链接已失效。

以上是关于mysql中的数组变量的主要内容,如果未能解决你的问题,请参考以下文章

php按当前年份、季度、当月,查询mysql数据库并输出数组

从 MySQL 设置一个数组,然后将每个值设置为变量 PHP

将mysql查询结果附加到变量

php最全基础,数组,函数,超全局变量,时间,回话,文件,php操作mysql

如何将数组设置为mysql用户变量

MySQL 触发器使用值数组替换重音/不需要的变量