前段时间想要用数组功能实现某些需求,结果发现mysql不支持数组,这个确实让人很头痛。查阅官方文档,也没有这一方面的资料。结果在网上,看到了某仁兄贴出了变相实现的一种方法,代码如下:
DELIMITER ; DROP DATABASE IF EXISTS PRO; USE MYSQL CREATE DATABASE PRO; USE PRO DROP TABLE IF EXISTS TEMP; CREATE TABLE TEMP ( ID INT(8) NOT NULL AUTO_INCREMENT, FOREIGN_KEY INT(8) NOT NULL, PRIMARY KEY (ID) ) TYPE=MyISAM AUTO_INCREMENT=1 COMMENT='测试';DELIMITER ;
DELIMITER // DROP PROCEDURE IF EXISTS DNA // CREATE PROCEDURE DNA (IN THE_CNT INT(8), IN THE_STR VARCHAR(10000)) BEGIN DECLARE i INT(8) DEFAULT 0; REPEAT SET i = i + 1; INSERT INTO TEMP VALUES (NULL, SUBSTRING_INDEX(SUBSTRING_INDEX(THE_STR, ',', i), ',', -1)); UNTIL i >= THE_CNT END REPEAT; END // DELIMITER ;CALL DNA(7, '231,24,1114,151,7831241,9134,989');
SELECT * FROM TEMP; +----+-------------+ | ID | FOREIGN_KEY | +----+-------------+ | 1 | 231 | | 2 | 24 | | 3 | 1114 | | 4 | 151 | | 5 | 7831241 | | 6 | 9134 | | 7 | 989 | +----+-------------+看了一下他的代码,觉得改方法不是很灵活,比如需要每次输入要轮询的次数,如这里输入了7,这个让我看起来很不舒服。于是自己动手修改了一下,特地也把代码贴出了,如下:
DELIMITER $$DROP PROCEDURE IF EXISTS `Pr_Rand_insert`$$
CREATE PROCEDURE `Pr_Rand_insert`(
IN insert_string VARCHAR(10000) -- 定义输入 ) BEGIN DECLARE I INT(8) DEFAULT 1; DECLARE J INT(8) DEFAULT 0; SET J = CHAR_LENGTH(insert_string)-CHAR_LENGTH(REPLACE(insert_string,',','')) + 1; -- 计算共有多少位为",",则再加上1就表示共有多少个数值需要插入 WHILE (I <= J) DO INSERT INTO num VALUES (SUBSTRING_INDEX(SUBSTRING_INDEX(insert_string,',',I),',',-1)); -- 用到了substring_index()函数 SET I = I + 1; END WHILE; SELECT CONCAT('共插入了',J,'个值,请确认'); END$$DELIMITER ;
希望对各位有帮助,有问题的可以和我交流交流