当前位置: 首页 > 知识库问答 >
问题:

MySQL:我们可以创建一个数组(关联或非关联)作为MySQL服务器脚本变量吗?[副本]

虞华翰
2023-03-14

我见过很多这种类型的SQL server脚本变量:@变量。但实际上,我们能否在变量后面存储一个数组(关联或非关联)?

使现代化

这个问题原来是这个问题的重复,这建议考虑可能使用:

  • SET type和JSON type,它们似乎只是列类型,而不是变量类型
  • 一个临时表,似乎存储在HDD中(对吗?)
  • 使用JSON字符串的函数(例如,JSON\u值和JSON\u长度),这些字符串完全可以在MySQL服务器脚本中使用。尽管如此,这些函数无助于派生数组并将其存储在变量中,而仅仅是JSON演练。我会接受这个变体,但每次调用json\u值(@json\u string)时,似乎都会解析json\u string

因此,到目前为止,似乎有机会创建一个数组(关联与否!),但没有机会确保保留数组以供进一步处理!

关于这个问题开头提到的问题。现在我只得到了第5个和第6个答案,它们与JSON字符串有关。它们很有趣!如果您对该主题感兴趣,请务必查看它们!

感谢大家的时间!

使现代化

正如@Panagiotis Kanavos所提到的,对于数组,按值获取数据的速度较慢。

但是如果:

>

  • 我们确实想简单地同时迭代M个输入数组并生成N个输出数组?(也许,我们只是对沿时间线整理参数并保留结果感兴趣。)阵列非常适合此任务。当然,在这种情况下,我们仍然可以使用表。问题是什么会更快?如果我们的迭代过程涉及到对数组元素的许多请求(我们可以依赖服务器缓存M输入数组,并且它们总是在手边吗?)以及创建多个结果数组(对于表,需要多长时间?我们如何知道表是在RAM中创建的,以便快速访问?)?

    我们希望在服务器脚本过程中手动创建一个数组,并且只以类似C的方式使用它(不打算按值获取其数据),并且在脚本执行后,就不需要在数组中使用它了?因此,这将是一个经典的类C脚本的纯数组。对我来说,在这种情况下,将阵列直接放入RAM是我们所需要的,并且会比创建表(可能会转到HDD)更有效,不是吗?

    因此,第二个(也是更一般的)问题出现了:我们能在多大程度上依赖服务器的优化?

    我知道在许多方面都进行了大量的优化工作。但是,有人遇到过服务器没有以最佳方式进行优化的情况吗?当程序员必须显式地重新排列代码以手动使其达到最佳状态时?

  • 共有1个答案

    孙宏壮
    2023-03-14

    MySQL将实现一种数据类型ARRAY来存储可变大小的数组,符合标准SQL(SQL:2003)数组功能。

    添加新的列数据类型:ARRAY[[可能是支持的任何数据类型(ARRAY本身和REF除外,MySQL不支持)。它定义了数组将包含的数据类型。

    --[]必须是大于零的无符号整数。它定义数组的最大基数,而不是其确切大小。请注意,当定义具有特定大小的数组时,内括号集是必需的,例如INT array对于定义具有默认大小的数组是正确的,INT array[5]是定义将包含5个元素的数组的正确语法。-如语法图所示,[]是可选的。如果省略,数组的最大基数默认为实现定义的默认值。Oracle的VARRAY大小限制为表中允许的最大列数,因此我建议我们将默认值设置为该最大值。因此,如果省略[],数组的最大基数默认为1000,这也应该是绝对最大基数。因此:--[]默认为1000。-[]范围从1到1000。

    数组是元素的有序集合,可能包含数据值。ARRAY数据类型将用于将数据数组存储在数据库表中。

    --数组是一组有序的元素。

    --数组中元素的最大数目称为数组的最大基数。最大基数是在定义数组时定义的,元素数据类型也是如此。

    --包含数据值的元素的实际数量称为数组的基数。数组的基数可能会有所不同,并且在定义数组时未定义。也就是说,数组的实例可能始终包含比最大基数允许的更少的元素。

    --每个元素可能包含一个与数组定义的数据类型相对应的数据值。-每个元素有三种状态:空白(未分配给元素的值)、NULL(分配给元素的值为NULL)和包含有效值(分配给元素的数据值)。

    --每个元素在数组中正好与一个序号位置相关联。第一个数组元素位于位置1(一),下一个位于位置2(二),依此类推。因此,假设n是数组的基数,数组元素的顺序位置是1(1)范围内的整数

    --数组具有最大基数和实际基数。--如果试图将值分配给位置大于数组最大基数的元素,则是错误的。--如果尝试仅将值分配给数组的一些元素,则不是错误。

    --特权:--创建具有ARRAY数据类型的表或使用ARRAY数据不需要特殊权限。

    --比较:--参见WL#2084添加比较ARRAY数据的能力。

    --分配:--参见WL#2082添加ARRAY元素引用函数和LW#2083添加ARRAY值构造函数。

    --要使数组数据类型有用,还必须实现另外两个语法元素。数组元素引用语法请参见WL#2082,数组构造函数语法请参见WL#2083。-也相关:--基数()。参见WL#2085。-数组串联。请参见WL#。

    创建具有新数据类型的表:Create table ArrayTable(array\u column INT array[3]);

    插入数据:插入到ArrayTable(array\u列)值(array[10,20,30]);

    检索数据:从ArrayTable WHERE array\u column中选择array\u column

    数组,最终基数

     类似资料:
    • 问题内容: 是否可以在网络服务器上将Python脚本作为后台服务运行?我想这样做以进行套接字通信。 问题答案: 您可以使其成为守护程序。有一个PEP可以提供更完整的解决方案,但是我发现这样做很好。

    • 在C语言中,不能在“case”语句中声明任何变量。 但是,当您与花括号一起使用时,您可以使用。 在Javascript案例中,我可以直接在案例语句内部使用var吗? 似乎没有错误,但我不相信这是语法上的OK。

    • 关联数组键名或 Mysql 别名更有效 我有一个名为student的mysql表,它有id、name和age列 我需要得到这样的结果 学生id学生姓名年龄 我有两个选择: 或 注意:不要放置更改表列名的解决方案。

    • 是否有方法变换以下对象数组: 变成这样?只返回日期: 我一直在尝试按如下方式推送日期元素,但似乎不起作用: 提前谢谢。

    • 我正在使用choco解算器4.0.5(最新的,直到现在)和网络上的几个例子,除了不考虑我的需要,使用旧版本。 我绝对是choco解算器的乞丐,经过在网络上非常努力的搜索,我来这里寻求帮助。 我有以下变量域: 一年中的日子: 1(代表1-jan),35(代表4-feb),58, 56, 125, 142, 168, 225, 360, 364......人的身份:789111, 789555, 78