1.批量造数据SQL
delimiter $
create PROCEDURE insertData2()
BEGIN
DECLARE i INT;
set i=0;
WHILE i<1000 DO
INSERT INTO table_name(id,name) VALUE(i, CONCAT('姓名',i));
set i=i+1;
end WHILE;
END $
CALL insertData2;
#==============================================
drop procedure if exists insert_emp;
delimiter ;;
create procedure insert_emp()
begin
declare i int;
set i=1;
while(i<=5)do
insert into table_name(id,name)
values(i, CONCAT('姓名',i));
set i=i+1;
end while;
end;;
delimiter ;
call insert_emp();
2.MYSQL中判断2个逗号分割的字符串是否有交集 函数
CREATE FUNCTION `INTE_ARRAY`(setA varchar(255) charset utf8,setB varchar(255) charset utf8) RETURNS int(1)
BEGIN
DECLARE idx INT DEFAULT 0 ; -- B 集合单元索引
DECLARE len INT DEFAULT 0;-- B 集合表达式长度
DECLARE llen INT DEFAULT 0;-- 最后检查位置
DECLARE clen INT DEFAULT 0;-- 当前检查位置
DECLARE tmpStr varchar(255) charset utf8;-- 临时检查数据集
DECLARE curt varchar(255) charset utf8;-- B 当前检查的单元
SET len = LENGTH(setB);
WHILE idx < len DO
SET idx = idx + 1;
SET tmpStr = SUBSTRING_INDEX(setB,",",idx);
SET clen = LENGTH(tmpStr);
-- 获取当前 setB 中的单元
IF idx = 1 THEN SET curt = tmpStr;
ELSE SET curt = SUBSTRING(setB,llen+2,clen-llen-1);
END IF;
-- 检查是否存在于 setA 中
IF FIND_IN_SET(curt,setA) > 0 THEN RETURN 1;
END IF;
-- 当前检查终点与上次检查终点相同则跳出
IF clen <= llen THEN RETURN 0;
END IF;
SET llen = clen;
END WHILE;
RETURN 0;
END
#INTE_ARRAY() 函数反1或0,它把两个以逗号分割的字符串进行交集检测,有交集返回1,无交集返回0。
#实例
select INTE_ARRAY("1,3,5,9","8,2,3,7") as is_inte_array; -- 1
select INTE_ARRAY("电子信息,科技","电子信息科技,软件工程") as is_inte_array; -- 0
select INTE_ARRAY("电子信息,科技","电子信息") as is_inte_array; -- 1
select INTE_ARRAY("电子信息,科技","电子信息,科技") as is_inte_array; -- 1
-- 不应把单个逗号也算作交集
select INTE_ARRAY(",","电子信息,科技") as is_inte_array; -- 0
查询 ,拆分,号分隔的数据 为多行
SELECT
a.id,
-- /*先正着取出几部分*/,然后在此基础再倒着取出最后那一部分
substring_index( substring_index(a.names,',',b.help_topic_id + 1),',' ,- 1 ) AS split_name
from
-- 将原数据先取出来 like中的符号与实际表里字段中的分割符对应
(select id,names from table_name) a
join
mysql.help_topic b -- mysql帮助表 内含字符等 ,help_topic_id是从0开始的,其实使用的是它的计数功能
ON -- on的条件筛选结束后,如果改行此字段分割完后有三部分,则总共产生3条记录
b.help_topic_id < ( length(a.names) - length(REPLACE (a.names, ',', '')) + 1 ) -- 实际算出的是分割后总共有几部分(此处是将长度为1的英文状态替换成空)
#===================================================
SELECT
a.id,
a.names,
(SUBSTRING_INDEX(SUBSTRING_INDEX(a.systemNames,',',b.help_topic_id+1),',',-1) ) as name
from (
select id,names from table_name
) a
left join mysql.help_topic b -- mysql帮助表 内含字符等 ,help_topic_id是从0开始的,其实使用的是它的计数功能
on b.help_topic_id < (LENGTH(a.names )-LENGTH(REPLACE(a.names ,',',''))+1)
ORDER BY a.id