Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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 为什么数组不能在sql中保存_Mysql_Sql_Arrays - Fatal编程技术网

Mysql 为什么数组不能在sql中保存

Mysql 为什么数组不能在sql中保存,mysql,sql,arrays,Mysql,Sql,Arrays,我知道,如果我错了,sql无法保存数组。 为什么? 我知道这是个愚蠢的问题,但是 数组只是结构化数据。为什么sql不能保存它 我可以重写mysql数据库或下载sql插件以保存数组吗 提前感谢要回答我自己的问题,我首先要感谢大家的评论 非常感谢。 回到问题上来:由于问题,普通sql无法保存数组,也不想保存 您可以通过另一种方式保存阵列: SQL表就像一个数组。将新表链接为数组。手动创建表,如果数组可能更改,则使用代码创建表。sql中不需要数组 如果必须这样做,或者想要这样做,可以使用Nosql或P

我知道,如果我错了,sql无法保存数组。 为什么? 我知道这是个愚蠢的问题,但是 数组只是结构化数据。为什么sql不能保存它

我可以重写mysql数据库或下载sql插件以保存数组吗


提前感谢

要回答我自己的问题,我首先要感谢大家的评论 非常感谢。 回到问题上来:由于问题,普通sql无法保存数组,也不想保存

您可以通过另一种方式保存阵列: SQL表就像一个数组。将新表链接为数组。手动创建表,如果数组可能更改,则使用代码创建表。sql中不需要数组


如果必须这样做,或者想要这样做,可以使用Nosql或PostgreSql,或者使用JSON、Oracle和XML保存数据,关系数据库管理系统RDBMS,例如MySQL、SQL Server、Oracle和PostgreSql通常将数据存储在表中。这是存储相关数据的一种非常好的方法

假设有三个实体:客户、订单和产品,订单包含多个产品。因此,有四个表:

客户客户编号、姓名 产品产品编号、名称、价格 订单订单号、客户号、日期 订单详细信息订单号、产品号、金额 我们将提供索引,即搜索树,以便轻松查找客户订单或订单中的产品。现在,我们想知道123号产品的订单数量:

select count(distinct order_no)
from order_details
where product_no = 123;
DBMS将快速找到产品的订单详细记录,因为查找索引就像在电话簿二进制搜索中按姓氏搜索一样。然后,这仅仅是计数。所以只有很少的记录被读取,整个查询速度非常快

现在数组也是如此。比如:

products(product_no, name, price)

customers
(
  customer_no,
  name, 
  array of orders
  (
    order_no, 
    date,
    array of products
    (
      product_no,
      amount
    )
  )
)
订单细节现在隐藏在订单元素中,而订单元素本身就在客户对象中。要获得产品123的订单数量,唯一的方法似乎是读取所有客户记录,遍历所有订单并查看它们是否包含产品。这可能需要很长时间。此外,如果实体之间的关系没有外键约束,数组可能包含甚至不存在的产品编号

也许有办法对数组数据进行索引,也有办法保证数据的一致性,但事实证明,使用表的关系方法可以很好地解决这些问题。因此,我们将避免使用数组,而是使用表来建立关系。这就是关系数据库的用途


话虽如此,数组可能时不时会派上用场,例如,在递归查询中,如果您想记住哪些记录已经被访问过,那么这些情况很少见。

在SQL世界中,您应该规范化数据。数组不是原子的,您可能希望引用数组的特定元素,而不是整个数组。无论如何,PostgresSQL/Oracle允许存储数组。如果你想使用数组,你可以使用NOSQLSql来存储序列化数据,例如Json或XML,你可以使用它来保存数组