mysql添加测试数据

自动添加测试数据

DELIMITER $$
DROP PROCEDURE IF EXISTS fillTable $$
CREATE PROCEDURE fillTable(IN num INT  , IN tbName VARCHAR(16))
BEGIN 
-- 获取当前数据库
	SELECT (@dbName:=DATABASE());
	SET @tbName = tbName;
-- 获取表的字段总数
	SET @currSql = "select count(1) from information_schema.COLUMNS where table_name = ? and table_schema = ? into @columnSum";
	PREPARE stmt FROM @currSql;
	EXECUTE stmt USING @tbName , @dbName;
	DEALLOCATE PREPARE stmt;
	
	SET @currNum = 0;
	
-- 这里设置随机的字符串
	SET @chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
	
	WHILE @currNum < num DO 
		-- 这里设置sql后面拼接
		SET @insertSql = CONCAT("insert into " , @tbName , " values ( ");
		SET @columnNum = 1;
		WHILE @columnNum <= @columnSum DO
			SET @VALUE := '';
			SET @currSql = "select (@column := COLUMN_NAME) , (@length := CHARACTER_MAXIMUM_LENGTH) , (@key := COLUMN_KEY) , (@type := DATA_TYPE) from information_schema.COLUMNS where table_name = ? and table_schema = ? limit ?";
			PREPARE stmt FROM @currSql;
			EXECUTE stmt USING @tbName , @dbName , @columnNum;
			DEALLOCATE PREPARE stmt;
			SELECT @insertSql ;
	-- 根据类型来填充数据
			IF RIGHT(@TYPE , 3) = 'int' THEN
				IF @TYPE = 'int' THEN
					SET @VALUE =@currNum;
				ELSE 
					SET @VALUE = FLOOR(RAND() * 100);
				END IF;
			
			ELSEIF RIGHT(@TYPE , 4) = 'char' THEN
				SET @counter = 0;
				WHILE @counter < @LENGTH DO    
	        		 SET @VALUE = CONCAT(@VALUE,SUBSTR(@chars,CEIL(RAND()*(LENGTH(@chars)-1)),1));  
	    			SET @counter = @counter + 1;
	    		END WHILE;
	    		
	    		SET @VALUE = CONCAT("'" , @VALUE , "'");
	    		
	    	ELSEIF @TYPE = 'blob' OR RIGHT(@TYPE , 4) = 'text' THEN
	    		SET @counter = 0;
	    	 	WHILE @counter < 100 DO    
	        		SET @VALUE = CONCAT(@VALUE,SUBSTR(@chars,CEIL(RAND()*(LENGTH(@chars)-1)),1));  
	    			SET @counter = @counter + 1;
	    		END WHILE;
	    		
	    		SET @VALUE = CONCAT("'" , @VALUE , "'");
	    		
	    	ELSEIF @TYPE = 'float' OR @TYPE = 'decimal' THEN
	    		SET @VALUE = ROUND(RAND() , 2);
	    	ELSEIF @TYPE = 'datetime'  THEN

	    		SET @VALUE = 'default';
	    	ELSE 
	    		SET @VALUE = '';
	    	END IF;
	    	
	-- 判断这个数是否是最后一个
			IF @columnNum = @columnSum THEN
				SET @insertSql = CONCAT(@insertSql , @VALUE , ')');
			ELSE 
				SET @insertSql = CONCAT(@insertSql , @VALUE , ',');
			END IF;
			
			SET @columnNum = @columnNum + 1;
		END WHILE;
	-- 执行
	SELECT @insertSql;
		PREPARE stmt FROM @insertSql;
		EXECUTE stmt;
		DEALLOCATE PREPARE stmt;
		
		SET @currNum = @currNum + 1;
	
	END WHILE;
	
END $$
DELIMITER ;

使用:
fillTable //存储过程名字
addNum //添加数量
table_name //表名
CALL fillTable( addNum,table_name)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值