MySQL如何實現數組功能

前段時間想要用數組功能實現某些需求,結果發現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='測試';mysql

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 ;sql

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 $$ide

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 ;文檔

但願對各位有幫助,有問題的能夠和我交流交流string

相關文章
相關標籤/搜索