iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql数组存储的步骤
  • 460
分享到

mysql数组存储的步骤

2024-04-02 19:04:59 460人浏览 安东尼
摘要

下文主要给大家带来Mysql数组存储的步骤,希望这些内容能够带给大家实际用处,这也是我编辑mysql数组存储的步骤这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。    &nbs

下文主要给大家带来Mysql数组存储的步骤,希望这些内容能够带给大家实际用处,这也是我编辑mysql数组存储的步骤这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。

                                                          mysql数组存储的步骤

在很多的情况下,在编写存储过程中往往会用到数组,但是mysql中存储过程传入参数并没有可以直接传入数组的方法。在这种情况下我们只能退而求之或者说换个方式以字符串形式传入参数,然后在过程体中把字符串再转成数组?

不过很遗憾告诉你,mysql并没有直接提供把字符串转数组的函数。现在你是不是有种想打人的感觉呢?不过,不用慌,此路不通,咱走另外的路,总有解决方法的。我们可以把传入的字符串截取成多个字符然后传入到临时表中,然后使用游标或者直接关联表过滤数据。这样就可以达到后面预期的效果了。

下面我们以一个例子来具体实践一下:

1、创建数据库,用于实例:

CREATE DATABASE huafeng_db;

use huafeng_db;

DROP TABLE IF EXISTS `huafeng_db`.`t_scores`;
DROP TABLE IF EXISTS `huafeng_db`.`t_students`;
DROP TABLE IF EXISTS `huafeng_db`.`t_class`;

CREATE TABLE `huafeng_db`.`t_class` (  `class_id` int(11) NOT NULL,  `class_name` varchar(32) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('1', '一年级');
INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('2', '二年级');
INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('3', '三年级');
INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('4', '四年级');
INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('5', '五年级');
INSERT INTO `huafeng_db`.`t_class` (`class_id`, `class_name`) VALUES ('6', '六年级');

CREATE TABLE `t_students` (  `student_id` int(11) NOT NULL AUTO_INCREMENT,  `student_name` varchar(32) NOT NULL,  `sex` int(1) DEFAULT NULL,  `seq_no` int(11) DEFAULT NULL,  `class_id` int(11) NOT NULL,
  PRIMARY KEY (`student_id`),
  KEY `class_id` (`class_id`),
  CONSTRaiNT `t_students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `t_class` (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('小红',0,1,'1');
INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('小青',0,2,'2');
INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('小明',1,3,'3');
INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('小兰',0,4,'4');
INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('小米',1,5,'5');
INSERT INTO `huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`) VALUES('小白',1,6,'6');

CREATE TABLE `huafeng_db`.`t_scores` (  `score_id` int(11) NOT NULL AUTO_INCREMENT,  `course_name` varchar(64) DEFAULT NULL,  `score` double(3,2) DEFAULT NULL,  `student_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`score_id`),
  KEY `student_id` (`student_id`),
  CONSTRAINT `t_scores_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `t_students` (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('1', '语文', '90', '1');
INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('2', '数学', '97', '1');
INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('3', '英语', '95', '1');
INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('4', '语文', '92', '2');
INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('5', '数学', '100', '2');
INSERT INTO `t_scores` (`score_id`, `course_name`, `score`, `student_id`) VALUES ('6', '英语', '98', '2');

2、需求: 根据学生编号批量删除学生信息

DROP PROCEDURE IF EXISTS `p_del_studentInfo_bySeqNo`;
DELIMITER $$
CREATE PROCEDURE p_del_studentInfo_bySeqNo(IN arrayStr VARCHAR(1000),IN sSplit VARCHAR(10))
SQL SECURITY INVOKER  #允许其他用户运行BEGIN    DECLARE e_code INT DEFAULT 0;#初始化报错码为0
    DECLARE result VARCHAR(256) CHARACTER set utf8;#初始化返回结果,解决中文乱码问题

    DECLARE arrLength INT DEFAULT 0;
    DECLARE arrString VARCHAR(1000);
    DECLARE sStr VARCHAR(1000);
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTioN SET e_code=1;#遇到错误后继续执行;(需要返回执行结果时用这个)


    START TRANSACTION;#启动事务
    SET arrLength = LENGTH(arrayStr) - LENGTH(REPLACE(arrayStr,sSplit,''));
    SET arrString = arrayStr;
    DROP TEMPORARY TABLE IF EXISTS list_tmp;
    create temporary table list_tmp(id VARCHAR(32));

    WHILE arrLength > 0 DO
      set sStr = substr(arrString,1,instr(arrString,sSplit)-1);            -- 得到分隔符前面的字符串  
      set arrString = substr(arrString,length(sStr)+length(sSplit)+1);     -- 得到分隔符后面的字符串  
      set arrLength = arrLength -1;
      set @str = trim(sStr);
      insert into list_tmp(id) values(@str);
     END WHILE;     IF row_count()=0 THEN  
        SET e_code = 1;  
        SET result = '请输入正确的参数';  
      END IF;

    set @count = (SELECT count(1) FROM t_students s,list_tmp t WHERE s.seq_no = t.id);    IF @count >0 THEN
        DELETE FROM t_scores WHERE student_id in (SELECT s.student_id FROM t_students s,list_tmp t WHERE s.seq_no = t.id);
        DELETE FROM t_students WHERE student_id in (SELECT t.id FROM list_tmp t);    ELSE
         SET e_code = 1;
         SET result = '该学生不存在!';
    END IF;    IF e_code=1 THEN
        ROLLBACK;  #回滚
    ELSE
        COMMIT;
        SET result = '该学生已被删除成功';
    END IF;
    SELECT result;
    DROP TEMPORARY TABLE IF EXISTS list_tmp;
END $$
DELIMITER ;

说明:在创建存储过程的时候,传入了两个参数,第一个代表要传入的数组字符串形式,第二个参数为以什么分割字符串。

声明初始化变量

DECLARE arrLength INT DEFAULT 0;
DECLARE arrString VARCHAR(1000);
DECLARE sStr VARCHAR(1000);

获取传入参数数组长度

SET arrLength = LENGTH(arrayStr) - LENGTH(REPLACE(arrayStr,sSplit,''));
SET arrString = arrayStr;

创建临时表

DROP TEMPORARY TABLE IF EXISTS list_tmp;
create temporary table list_tmp(id VARCHAR(32));

截取数组字符串并依次存入到临时表中供后面业务使用

WHILE arrLength > 0 DO
  set sStr = substr(arrString,1,instr(arrString,sSplit)-1);            -- 得到分隔符前面的字符串  
  set arrString = substr(arrString,length(sStr)+length(sSplit)+1);     -- 得到分隔符后面的字符串  
  set arrLength = arrLength -1;
  set @str = trim(sStr);
  insert into list_tmp(id) values(@str);
END WHILE;

注: 存储过程结束时一定要记得删除临时表

对于以上关于mysql数组存储的步骤,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的数据库,相信你会喜欢上这些内容的。

您可能感兴趣的文档:

--结束END--

本文标题: mysql数组存储的步骤

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

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

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

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

下载Word文档
猜你喜欢
  • mysql存储emoji表情步骤详解
    Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x94\xA5' for column Emoji表情存储到Mysql...
    99+
    2024-04-02
  • sqlite数据库存储的步骤是什么
    创建数据库:使用SQLite的命令行工具或者SQLite的API创建一个新的数据库文件。 创建表格:在数据库中创建表格,定义...
    99+
    2024-04-09
    sqlite
  • JFinal 调用存储过程的步骤
    目录存储过程创建储存过程JFinal调用新建实现ICallback的类调用存储过程 存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储...
    99+
    2024-04-02
  • 怎么在mysql中存储数组
    怎么在mysql中存储数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、创建数据库,用于实例:CREATE DATABASE...
    99+
    2024-04-02
  • Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
    目录一、mysql数据库建表二、下面直接上代码(爬虫方法)三、插入数据库json数据       四、总结一下爬取数据的步...
    99+
    2024-04-02
  • 大数据的存储与分析的具体操作步骤
    大数据的存储与分析包括以下具体操作步骤:1. 数据采集:从多个来源(如传感器、日志文件、社交媒体等)收集大量的数据。2. 数据清洗:...
    99+
    2023-10-11
    大数据
  • sql server2008调试存储过程的完整步骤
    前言 SQLSERVER 2005中不知因何去掉了很重要的DEBUGGER功能,要调试,必须要安装VS2005专业版或者更高版本。非常不方便。 还好,SQLSERVER 2008中这个很重要而且方便的功能又...
    99+
    2024-04-02
  • MySQL5.5使用CSV存储引擎导入加载数据的步骤
    本篇内容主要讲解“MySQL5.5使用CSV存储引擎导入加载数据的步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL5.5使用CSV存储引擎导入加载数...
    99+
    2024-04-02
  • php数组怎么存储的
    PHP是一种广泛使用的编程语言,特别是在Web应用程序的开发中。而在PHP中,数组是一种非常常用的数据类型,用来存储一组相似的数据。那么,PHP数组是如何存储的呢?下面我们来详细了解一下。在PHP中,数组可以分为两种类型:索引数组和关联数组...
    99+
    2023-05-22
  • 分解oracle存储过程或函数调试过程步骤
    目录第一步:选择调试模式第二步:输入测试数据第三步:点击开始调试器第四步:输入要显示的变量名第五步:点击单步调试第六步:逐步点击单步调试,并查看变量的变化第七步:不断重复前六步,直到...
    99+
    2024-04-02
  • minio分布式存储搭建的步骤是什么
    要搭建minio分布式存储,需要按照以下步骤进行操作: 下载minio软件并解压缩到服务器上。 配置minio服务,包括设置acc...
    99+
    2024-04-09
    minio
  • 细谈Mysql的存储过程和存储函数
    1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语句...
    99+
    2024-04-02
  • 关于MySQL的存储过程与存储函数
    目录初识存储过程存储过程语法存储过程调用存储函数的使用语法函数的调用对比存储函数和存储过程初识存储过程 理解:含义: 存储过程(Stored Procedure)是在大型数据库系统中...
    99+
    2023-05-19
    MySQL存储过程 MySQL存储函数
  • MySQL同步数据Replication的实现步骤
    目录一、同步复制数据基本原理二、同步数据示例1、修改主从mysql配置文件2、主机建立同步账号,并查看主库状态信息3、从机同步配置4、查看同步配置效果MySQL提供了Replication功能,可以实现将一个数据库的数据...
    99+
    2023-03-24
    MySQL同步数据Replication MySQL Replication同步
  • mysql数据的存储过程
    MySQL存储过程是一组预定义的SQL语句集合,可以在数据库中进行预先编译和存储,并在需要时进行调用和执行。存储过程通常用于处理复杂...
    99+
    2023-08-22
    MySQL
  • php如何把数组存储到数组
    PHP是一种流行的服务器端脚本语言,用于开发Web应用程序。它具有易于学习和使用的语法,可与多个数据库系统(例如MySQL和Oracle)集成,并且提供了一个强大的标准库。一个常见的PHP编程任务是将一个数组存储到另一个数组中。在本文中,我...
    99+
    2023-05-19
  • mysql创建数据库的步骤
    这篇文章主要讲解了“mysql创建数据库的步骤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql创建数据库的步骤”吧! ...
    99+
    2024-04-02
  • 浅谈MYSQL存储过程和存储函数
    目录1. 什么是存储过程和存储函数?2. 创建存储过程3. 创建存储函数4. 存储过程和存储函数的使用5. 带有if语句的存储过程6. 带有循环语句的存储过程7. 带有事务的存储过程8. 带有游标的存储函数9. 存储过程...
    99+
    2023-05-05
    MYSQL存储过程 MYSQL 存储函数
  • 数组是如何在内存中存储的?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-23
  • mysql创建数据表的步骤
    mysql创建数据表的步骤?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!创建MySQL数据表需要以下信息:1.表名2.表字...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作