存储过程模拟填充数据

在学习MYSQL基础知识后,作者为一个项目创建了一个存储过程,用于模拟填充数据库中的独立数据,以供客户查看。虽然这些数据无关联性,但可以根据需求添加逻辑代码。

最近学习了MYSQL的基础知识后,刚好有一个项目有这样需求:模拟填充数据,展示给客户看。所以就写了这样一个存储过程,来填充模拟数据。当然,这些数据之间没有什么关联性,只是很单纯的一个个独立的数据。如果需要的话,可以自行进行补充相关的逻辑代码。

如下所示:

CREATE DEFINER=`root`@`%` PROCEDURE `proc_data_create`(IN _table varchar(20),IN _database varchar(20),IN _number int(11),IN _id int(11))
BEGIN
# _table : 表名;
# _database : 数据库名;
# _number : 添加条数;
	DECLARE _column varchar(20); #表字段
	DECLARE _column_type varchar(20); #字段类型
	DECLARE _columns varchar(500) DEFAULT ''; #所有字段
	#DECLARE _value varchar(225);
	DECLARE _values text DEFAULT '';
	DECLARE _values_group longtext DEFAULT '';
	DECLARE _count INT;
	DECLARE i INT DEFAULT 1;
	DECLARE j INT DEFAULT 0;
	
-- 	SET @s = '';
-- 	SET @sql_temp = '';
	SET @t = _table;
	SET @d = _database;
	SET @n = _number;
	
	#查询字段数量
set _count = (select count(COLUMN_NAME) from INFORMATION_SCHEMA.Columns where table_name=@t and table_schema=@d);

WHILE j < @n DO

		SET i = 1;
		SET _columns = '';
		SET _values = '';

		WHILE i < _count DO

		# 循环获取除去id(第一列)外的所有字段
		SET _column = (select COLUMN_NAME from INFORMATION_SCHEMA.Columns where table_name=@t and table_schema=@d LIMIT i,1);

		# 得到所有字段
		SET _columns = CONCAT(_columns,',',_column);

		# 得到所有自动生成的数据

		SET _column_type = (select data_type from INFORMATION_SCHEMA.Columns where table_name=@t and table_schema=@d LIMIT i,1);

		#SET _column_type = CONCAT('\'',_column_type,'\'');

		# 单一字段特殊处理
		IF (_column = 'ZT') THEN 
			SET @v = '已提交';
		ELSEIF (_column = 'SJ') THEN
			#SET @v = DATE_ADD(CURDATE(), INTERVAL -j DAY);
			SET @v = DATE_ADD(DATE_ADD(CURDATE(), INTERVAL +8 DAY),INTERVAL -j DAY);
		ELSEIF (_column = 'YF') THEN
			SET @v = DATE_FORMAT(CURDATE(), '%Y-%m');
		ELSEIF (_column = 'LX') THEN 
			SET @v = IF(floor(rand() * 2) = 1, '券', '团购');
		ELSEIF (_column = 'QM') THEN
			SET @v = floor(rand()*10 + 8)*10 + 8;
		ELSEIF ( _column = 'store_id') THEN 
			SET @v = _id;
		# 按类型处理
		ELSEIF (_column_type = 'int') THEN
			SET @v = round(rand() * 100);
		ELSEIF (_column_type = 'varchar') THEN 
			SET @v = concat('测*试',round(rand() * 10000));
		ELSEIF (_column_type = 'double') THEN 
			SET @v = floor(rand() * 500) + 1000 + floor(rand() * 80 + 20) / 100;
		END IF;

		SET _values = CONCAT(_values,',','\'',@v,'\'');

		SET i = i + 1 ;
		END WHILE;

SET _columns = substring(_columns,2,LENGTH(_columns));
SET _values = CONCAT('(',substring(_values,2,LENGTH(_values)),')');

SET _values_group = CONCAT(_values_group,',',_values);

SET j = j + 1;
END WHILE;

SET @s = CONCAT('INSERT INTO ',@t,'(',_columns,') values',substring(_values_group,2,LENGTH(_values_group)));

SELECT @s,_columns,_values_group,_count;
PREPARE stmt FROM @s ;

EXECUTE stmt ;
END

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值