怎么在mysql中存储数组
怎么在mysql中存储数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
1、创建数据库,用于实例:
CREATEDATABASEhuafeng_db;usehuafeng_db;DROPTABLEIFEXISTS`huafeng_db`.`t_scores`;DROPTABLEIFEXISTS`huafeng_db`.`t_students`;DROPTABLEIFEXISTS`huafeng_db`.`t_class`;CREATETABLE`huafeng_db`.`t_class`(`class_id`int(11)NOTNULL,`class_name`varchar(32)CHARACTERSETutf8DEFAULTNULL,PRIMARYKEY(`class_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;INSERTINTO`huafeng_db`.`t_class`(`class_id`,`class_name`)VALUES('1','一年级');INSERTINTO`huafeng_db`.`t_class`(`class_id`,`class_name`)VALUES('2','二年级');INSERTINTO`huafeng_db`.`t_class`(`class_id`,`class_name`)VALUES('3','三年级');INSERTINTO`huafeng_db`.`t_class`(`class_id`,`class_name`)VALUES('4','四年级');INSERTINTO`huafeng_db`.`t_class`(`class_id`,`class_name`)VALUES('5','五年级');INSERTINTO`huafeng_db`.`t_class`(`class_id`,`class_name`)VALUES('6','六年级');CREATETABLE`t_students`(`student_id`int(11)NOTNULLAUTO_INCREMENT,`student_name`varchar(32)NOTNULL,`sex`int(1)DEFAULTNULL,`seq_no`int(11)DEFAULTNULL,`class_id`int(11)NOTNULL,PRIMARYKEY(`student_id`),KEY`class_id`(`class_id`),CONSTRAINT`t_students_ibfk_1`FOREIGNKEY(`class_id`)REFERENCES`t_class`(`class_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;INSERTINTO`huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`)VALUES('小红',0,1,'1');INSERTINTO`huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`)VALUES('小青',0,2,'2');INSERTINTO`huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`)VALUES('小明',1,3,'3');INSERTINTO`huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`)VALUES('小兰',0,4,'4');INSERTINTO`huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`)VALUES('小米',1,5,'5');INSERTINTO`huafeng_db`.`t_students`(`student_name`,`sex`,`seq_no`,`class_id`)VALUES('小白',1,6,'6');CREATETABLE`huafeng_db`.`t_scores`(`score_id`int(11)NOTNULLAUTO_INCREMENT,`course_name`varchar(64)DEFAULTNULL,`score`double(3,2)DEFAULTNULL,`student_id`int(11)DEFAULTNULL,PRIMARYKEY(`score_id`),KEY`student_id`(`student_id`),CONSTRAINT`t_scores_ibfk_1`FOREIGNKEY(`student_id`)REFERENCES`t_students`(`student_id`))ENGINE=InnoDBAUTO_INCREMENT=3DEFAULTCHARSET=utf8;INSERTINTO`t_scores`(`score_id`,`course_name`,`score`,`student_id`)VALUES('1','语文','90','1');INSERTINTO`t_scores`(`score_id`,`course_name`,`score`,`student_id`)VALUES('2','数学','97','1');INSERTINTO`t_scores`(`score_id`,`course_name`,`score`,`student_id`)VALUES('3','英语','95','1');INSERTINTO`t_scores`(`score_id`,`course_name`,`score`,`student_id`)VALUES('4','语文','92','2');INSERTINTO`t_scores`(`score_id`,`course_name`,`score`,`student_id`)VALUES('5','数学','100','2');INSERTINTO`t_scores`(`score_id`,`course_name`,`score`,`student_id`)VALUES('6','英语','98','2');
2、需求: 根据学生编号批量删除学生信息
DROPPROCEDUREIFEXISTS`p_del_studentInfo_bySeqNo`;DELIMITER$$CREATEPROCEDUREp_del_studentInfo_bySeqNo(INarrayStrVARCHAR(1000),INsSplitVARCHAR(10))SQLSECURITYINVOKER#允许其他用户运行BEGINDECLAREe_codeINTDEFAULT0;#初始化报错码为0DECLAREresultVARCHAR(256)CHARACTERsetutf8;#初始化返回结果,解决中文乱码问题DECLAREarrLengthINTDEFAULT0;/*定义数组长度*/DECLAREarrStringVARCHAR(1000);/*定义初始数组字符*/DECLAREsStrVARCHAR(1000);/*定义初始字符*/DECLARECONTINUEHANDLERFORSQLEXCEPTIONSETe_code=1;#遇到错误后继续执行;(需要返回执行结果时用这个)STARTTRANSACTION;#启动事务SETarrLength=LENGTH(arrayStr)-LENGTH(REPLACE(arrayStr,sSplit,''));/*获得数组长度*/SETarrString=arrayStr;DROPTEMPORARYTABLEIFEXISTSlist_tmp;createtemporarytablelist_tmp(idVARCHAR(32));/*定义临时表*/WHILEarrLength>0DOsetsStr=substr(arrString,1,instr(arrString,sSplit)-1);--得到分隔符前面的字符串setarrString=substr(arrString,length(sStr)+length(sSplit)+1);--得到分隔符后面的字符串setarrLength=arrLength-1;set@str=trim(sStr);insertintolist_tmp(id)values(@str);ENDWHILE;IFrow_count()=0THENSETe_code=1;SETresult='请输入正确的参数';ENDIF;set@count=(SELECTcount(1)FROMt_studentss,list_tmptWHEREs.seq_no=t.id);IF@count>0THENDELETEFROMt_scoresWHEREstudent_idin(SELECTs.student_idFROMt_studentss,list_tmptWHEREs.seq_no=t.id);DELETEFROMt_studentsWHEREstudent_idin(SELECTt.idFROMlist_tmpt);ELSESETe_code=1;SETresult='该学生不存在!';ENDIF;IFe_code=1THENROLLBACK;#回滚ELSECOMMIT;SETresult='该学生已被删除成功';ENDIF;SELECTresult;DROPTEMPORARYTABLEIFEXISTSlist_tmp;END$$DELIMITER;
说明:在创建存储过程的时候,传入了两个参数,第一个代表要传入的数组字符串形式,第二个参数为以什么分割字符串。
声明初始化变量
DECLAREarrLengthINTDEFAULT0;/*定义数组长度*/DECLAREarrStringVARCHAR(1000);/*定义初始数组字符*/DECLAREsStrVARCHAR(1000);/*定义初始字符*/
获取传入参数数组长度
SETarrLength=LENGTH(arrayStr)-LENGTH(REPLACE(arrayStr,sSplit,''));/*获得数组长度*/SETarrString=arrayStr;/*赋值*/
创建临时表
DROPTEMPORARYTABLEIFEXISTSlist_tmp;createtemporarytablelist_tmp(idVARCHAR(32));/*定义临时表*/
截取数组字符串并依次存入到临时表中供后面业务使用
WHILEarrLength>0DOsetsStr=substr(arrString,1,instr(arrString,sSplit)-1);--得到分隔符前面的字符串setarrString=substr(arrString,length(sStr)+length(sSplit)+1);--得到分隔符后面的字符串setarrLength=arrLength-1;set@str=trim(sStr);insertintolist_tmp(id)values(@str);ENDWHILE;
关于怎么在mysql中存储数组问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。