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

被折叠的 条评论
为什么被折叠?



