iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql有没有数组
  • 848
分享到

mysql有没有数组

mysql 2023-04-19 05:04:24 848人浏览 安东尼
摘要

这篇文章主要介绍“Mysql有没有数组”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql有没有数组”文章能帮助大家解决问题。 My

这篇文章主要介绍“Mysql有没有数组”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql有没有数组”文章能帮助大家解决问题。

Mysql中无数组类型,通常将数组元素按某个字符分割以字符串形式存储。MYSQL中没有数组的原因是因为大多数人并不真正需要它。关系数据库使用关系工作,并且大多数情况下,最好是为每个“信息位”分配一行表。例如,可能认为“我想要一个东西列表”,而是创建一个新表,将一个表中的行与另一个表中的行相关联;这样可以表示“M:N”关系。数据库可以索引这些行;而数组通常不会编入索引。

1. MySQL中以字符串的形式存储数组

MySQL中无数组类型,通常将数组元素按某个字符分割以字符串形式存储

1.1. 求数组中元素的个数

方法:按指定符号分割字符串,返回分割后的元素个数。方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

CREATE function Get_StrArrayLength 
(
@str varchar(1024), --要分割的字符串
@split varchar(10) --分隔符号
)
returns int
as
begin
declare @location int
declare @start int
declare @length int
set @str=ltrim(rtrim(@str))
set @location=charindex(@split,@str)
set @length=1
while @location<>0
begin
set @start=@location+1
set @location=charindex(@split,@str,@start)
set @length=@length+1
end
return @length
end

调用示例:

select  Get_StrArrayLength('78,1,2,3',',')

返回值:

4

1.2. 得到数组中指定位置的元素

方法:按指定符号分割字符串,返回分割后指定索引的第几个元素(注意索引从1开始),象数组一样方便

CREATE function Get_StrArrayStrOfIndex 
(
@str varchar(1024), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
)
returns varchar(1024)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
end
if @location =0 select @location =len(@str)+1
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
return substring(@str,@start,@location-@start)
end

调用示例:

select  Get_StrArrayStrOfIndex('8,9,4',',',2)

返回值:

9

1.3. 结合以上两个函数,遍历数组中的元素

方法:结合上边两个函数,象数组一样遍历字符串中的元素

declare @str varchar(50) 
set @str='1,2,3,4,5'
declare @next int
set @next=1
while @next<=Get_StrArrayLength(@str,',')
begin
print Get_StrArrayStrOfIndex(@str,',',@next)
set @next=@next+1
end

调用结果:

1
2
3
4
5

2.MySQL中存储数组(list)的示例

我在MySQL中有两个表。表Person具有以下列:

id | name | fruits

水果列可以包含空或像(‘apple’,’orange’,’banana’)或(‘strawberry’)等的字符串数组。第二个表是Table Fruit,有以下三列:

____________________________
fruit_name | color  | price
____________________________
apple      | red    | 2
____________________________
orange     | orange | 3
____________________________
...,...

那么我应该如何设计第一个表中的fruits列,以便它可以容纳从第二个表中的fruit_name列获取值的字符串数组?由于MySQL中没有数组数据类型,我该怎么办呢?

最佳答案:

正确的方法是使用多个表,并在查询中加入它们。

例如:

CREATE TABLE person (
`id` INT NOT NULL PRIMARY KEY,
`name` VARCHAR(50)
);
 
CREATE TABLE fruits (
`fruit_name` VARCHAR(20) NOT NULL PRIMARY KEY,
`color` VARCHAR(20),
`price` INT
);
 
CREATE TABLE person_fruit (
`person_id` INT NOT NULL,
`fruit_name` VARCHAR(20) NOT NULL,
PRIMARY KEY(`person_id`, `fruit_name`)
);

person_fruit表包含一个人与其相关联的每个水果的一行,并且有效地将人和水果表链接在一起。

1 | "banana"
1 | "apple"
1 | "orange"
2 | "straberry"
2 | "banana"
2 | "apple"

当你想检索一个人和他们的水果,你可以做这样的事情:

SELECT p.*, f.*
FROM person p
INNER JOIN person_fruit pf
ON p.id = pf.person_id
INNER JOIN fruits f
ON pf.fruit_name = f.fruit_name

说明一:

SQL中没有数组的原因是因为大多数人并不真正需要它。关系数据库(SQL就是这样)使用关系工作,并且大多数情况下,最好是为每个“信息位”分配一行表。例如,你可能认为“我想要一个东西列表”,而是创建一个新表,将一个表中的行与另一个表中的行相关联[1] 这样,您可以表示M:N关系。另一个优点是这些链接不会使包含链接项的行混乱。数据库可以索引这些行。数组通常不会编入索引。

如果您不需要关系数据库,则可以使用例如键值存储。

黄金法则是“[每个]非关键[属性]必须提供关于密钥,整个密钥以及密钥的事实。” 数组做得太多了。它有多个事实,它存储订单(与关系本身无关)。性能很差(见上文)。

想象一下,你有一张人桌,你有一张桌子,可以让人打电话。现在你可以让每个人都有他的电话列表。但每个人与许多其他事物有许多其他关系。这是否意味着我的人员表应该包含他连接的每一件事物的数组?不,这不是这个人本身的属性。

[1]:如果链接表只有两列(每个表的主键),这没关系!如果关系本身具有其他属性,则应在此表中将其表示为列。

说明二:

MySQL 5.7现在提供JSON数据类型。这种新的数据类型提供了一种存储复杂数据的便捷新方法:列表,字典等。

也就是说,rrays不能很好地映射数据库,这就是对象关系映射可能非常复杂的原因。历史上,人们通过创建描述它们的表并将每个值添加为自己的记录来在MySQL中存储列表/数组。该表可能只有2或3列,或者可能包含更多列。如何存储此类数据实际上取决于数据的特征。

例如,列表是否包含静态或动态条目数?该列表是否会保持较小,或者预计会增长到数百万条记录?这张桌子上会有很多读物吗?很多写作?很多更新?在决定如何存储数据集合时,这些都是需要考虑的因素。

此外,密钥:价值数据存储/文件存储,如Cassandra,mongoDBRedis等也提供了一个很好的解决方案。请注意数据实际存储的位置(如果存储在磁盘或内存中)。并非所有数据都需要位于同一数据库中。某些数据无法很好地映射到关系数据库,您可能有理由将其存储在其他位置,或者您可能希望使用内存中的键:值数据库作为存储在磁盘某处或作为临时存储的数据的热缓存像会话这样的东西。

关于“mysql有没有数组”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网数据库频道,小编每天都会为大家更新不同的知识点。

您可能感兴趣的文档:

--结束END--

本文标题: mysql有没有数组

本文链接: https://www.lsjlt.com/news/201600.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql有没有数组
    这篇文章主要介绍“mysql有没有数组”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql有没有数组”文章能帮助大家解决问题。 My...
    99+
    2023-04-19
    mysql
  • javascript数组有没有map方法
    本篇内容介绍了“javascript数组有没有map方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • php索引数组有没有键值
    本文小编为大家详细介绍“php索引数组有没有键值”,内容详细,步骤清晰,细节处理妥当,希望这篇“php索引数组有没有键值”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php索引数组有键值。在php中,无论是索引数...
    99+
    2023-06-30
  • mysql有没有varchar2
    今天小编给大家分享一下mysql有没有varchar2的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2023-04-06
    mysql varchar2
  • mysql有没有plsql
    本篇内容主要讲解“mysql有没有plsql”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql有没有plsql”吧! mysq...
    99+
    2023-04-14
    mysql plsql
  • php判断数组没有键
    在 PHP 编程中,数组是非常常见的数据类型,它可以存储多个数据元素,并且通过键值对来访问其中的元素。在数组的使用中,有时候需要判断数组中是否存在某个键,但如果数组中不存在该键,又该如何处理呢?本文将会介绍几种判断数组没有键的方法。一、使用...
    99+
    2023-05-22
  • mysql中有没有if
    本篇内容介绍了“mysql中有没有if”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • mysql有没有索引
    本篇内容主要讲解“mysql有没有索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql有没有索引”吧! mysql有索引。M...
    99+
    2022-11-30
    mysql
  • mysql数据库中有没有json类型
    小编给大家分享一下mysql数据库中有没有json类型,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql有json类型。M...
    99+
    2024-04-02
  • mysql数据库中有没有top查询
    小编给大家分享一下mysql数据库中有没有top查询,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!用惯了access mssql server的朋友,可能在用mysql查询前N条记录时,习惯的...
    99+
    2024-04-02
  • mysql有没有触发器
    这篇文章主要介绍“mysql有没有触发器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql有没有触发器”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • es6如何判断数组里面有没有值
    这篇文章主要介绍了es6如何判断数组里面有没有值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇es6如何判断数组里面有没有值文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • mysql中有没有关键字
    这篇文章主要介绍“mysql中有没有关键字”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql中有没有关键字”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • mysql有没有联合索引
    本篇内容主要讲解“mysql有没有联合索引”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql有没有联合索引”吧! mysql中...
    99+
    2024-04-02
  • php如何检测数组里有没有重复值
    今天小编给大家分享一下php如何检测数组里有没有重复值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。检测方法:1、用“arr...
    99+
    2023-06-30
  • mysql与oracle有没有区别
    今天小编给大家分享一下mysql与oracle有没有区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • mysql有没有临时变量
    这篇文章主要介绍“mysql有没有临时变量”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql有没有临时变量”文章能帮助大家解决问题。 ...
    99+
    2023-02-13
    mysql
  • mysql视图有没有空间
    这篇文章给大家分享的是有关mysql视图有没有空间的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql视图没有空间。MySQL视图是一种虚拟存在的表,并不实际存在于数据库中,...
    99+
    2024-04-02
  • linux有没有itoa函数
    本篇内容介绍了“linux有没有itoa函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2023-04-13
    linux itoa
  • es6如何检测数组中有没有某个元素
    这篇文章主要介绍“es6如何检测数组中有没有某个元素”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6如何检测数组中有没有某个元素”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作