`
无量
  • 浏览: 1146423 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql创建多张表结构一样的表(分表时用)

阅读更多
一、存储过程创建多张表

1.利用存储过程,动态创建多张表:
创建16张表,从score_stream_00到score_stream_15

DELIMITER $$

CREATE
    PROCEDURE `score`.`p`()
    BEGIN

	     DECLARE i INT;
	     DECLARE table_name VARCHAR(20); 
	     DECLARE table_pre VARCHAR(20); 
	     DECLARE sql_text VARCHAR(2000); 
	     SET i=1;
	     SET table_name='';
	     SET table_pre='score_stream_';
	     SET sql_text='';
	     WHILE i<16 DO
			IF i<10 THEN SET table_name=CONCAT(table_pre,'0',i);
			ELSE SET table_name=CONCAT(table_pre,i);
			END IF;
			
			SET sql_text=CONCAT('CREATE TABLE ', table_name, '(
				  id VARCHAR(32) NOT NULL COMMENT \'主键\',
				  user_id VARCHAR(32) NOT NULL COMMENT \'用户ID\',
				  direction VARCHAR(8) NOT NULL COMMENT \'收支方向 收入-IN 支出-OUT\',
				  operate_score INT(11) NOT NULL COMMENT \'操作的积分数\',
				  operator VARCHAR(32) NOT NULL COMMENT \'操作人:如果是系统,则为system\',
				  operate_time DATETIME NOT NULL COMMENT \'操作时间,首次生成积分流水的操作时间,用来排序显示\',
				  score_status INT(4) NOT NULL',
				  score_rule_id VARCHAR(32) DEFAULT NULL COMMENT \'积分规则ID\',
				  member_level INT(4) DEFAULT NULL COMMENT \'会员等级1:普通会员,2:VIP会员\',  
				  score_type INT(4) NOT NULL COMMENT \'获取积分的类型,和score_task表中的score_type一个含义\',				 
				  product_id VARCHAR(32) DEFAULT NULL COMMENT \'产品ID\',
				  remark VARCHAR(256) DEFAULT NULL COMMENT \'积分流水的备注(用来给内部人看的)\',
				  operate_source INT(4) DEFAULT NULL COMMENT \'操作来源:1:系统操作触发,2:人工操作触发\',
				  gmt_modify DATETIME NOT NULL COMMENT \'表改修时间\',
				  gmt_create DATETIME NOT NULL COMMENT \'表创建时间\',
				  PRIMARY KEY (id),
				  KEY idx_user_id (user_id),
				  KEY idx_direction (direction),
				  KEY idx_operate_time (operate_time),
				  KEY idx_score_status (score_status)
				) ENGINE=INNODB DEFAULT CHARSET=utf8' );
				
			SELECT sql_text; 
			SET @sql_text=sql_text;
			PREPARE stmt FROM @sql_text;
			EXECUTE stmt;
			DEALLOCATE PREPARE stmt;  
			SET i=i+1;
	    END WHILE;

    END$$
          
DELIMITER ;


2.执行存储过程,创建表

CALL p();


二、利用sql语句创建多张表
创建16张表:

CREATE TABLE `usermng_daily_earning_0000` (
  `id` VARCHAR(24) NOT NULL COMMENT '主键 15位时间戳+3位随机数+userId后两位+4位表示所在表',
  `user_id` VARCHAR(22) NOT NULL COMMENT '用户ID(根据userId来分表)',
  `occur_date` INT(8) NOT NULL COMMENT '收益发生日期',
  `ta_id` VARCHAR(22) DEFAULT NULL COMMENT '交易模式',
  `product_id` VARCHAR(20) NOT NULL COMMENT '产品ID',
  `product_name` VARCHAR(50) NOT NULL COMMENT '产品名称',
  `order_id` VARCHAR(20) DEFAULT NULL COMMENT '订单ID',
  `assets_id` VARCHAR(22) NOT NULL COMMENT'资产ID',
  `earning` DECIMAL(16,2) NOT NULL COMMENT '产生的收益',
  `modify_time` DATETIME NOT NULL COMMENT '表修改时间',
  `create_time` DATETIME NOT NULL COMMENT '表创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`) USING BTREE,
  KEY `IDX_occur_date` (`occur_date`) USING BTREE,
  KEY `IDX_create_time` (`create_time`) USING BTREE
) ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE `usermng_daily_earning_0008` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0016` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0024` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0032` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0040` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0048` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0056` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0064` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0072` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0080` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0088` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0096` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0104` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0112` LIKE usermng_daily_earning_0000;
CREATE TABLE `usermng_daily_earning_0120` LIKE usermng_daily_earning_0000;


注意:额外说一句,第二种表命名的方式更加便于以后数据迁移和扩容
0
0
分享到:
评论

相关推荐

    MySQL版省市区表 ---三级联动 省市区三张表 -分表

    MySQL版省市区表 ---三级联动 省市区三张表 -分表 共三张表,合计三千条数据 数据是官网所发布,时间略旧,可能与最新国区有点误差

    kettle对数据分表插入

    在大数据场景下,单一的大表可能会导致性能瓶颈,因此通常会采用分区策略将数据分散到多个小表中,这被称为分表。这样做可以提高查询效率,减轻单个表的压力。Oracle数据库提供了多种分区策略,如范围分区、列表分区...

    sharding分库分表demo

    在分库分表的场景下,ShardingSphere能够根据预定义的规则将数据分散到多个数据库和表中,以实现水平扩展,提高数据库处理能力。它支持自定义分片策略,例如根据用户ID取模、时间戳范围等方式,使得数据分布均匀,...

    mysql3库3表分库分表解决方案之 Apache ShardingSphere.zip

    MySQL数据库在处理大数据量时,性能可能会受到严重影响,此时就需要采用分库分表策略来优化。Apache ShardingSphere,作为一款开源的分布式数据库中间件,提供了完善的分库分表解决方案,帮助开发者解决这一问题。本...

    msyql分表sql,导入即可

    1. 物理分表:也称为手动分表,是在数据库层面创建多个实际的表,每个表对应一部分数据。例如,创建一系列名为`province_XX`的表,其中`XX`代表省份代码。数据插入时,根据省份字段决定数据存入哪个表。这种方式对...

    Kettle 数据库与数据库多表循环同步

    2.使用前提是来源看与目标库中共同存在的表结构必须一致(因为是简易版,没有添加创建表等); 3.只需更改数据库连接即可,其他参数不必调整;4.目前使用KETTL7.1版本; 5.支持中文表、以及含特殊字符的表名; 6....

    Mysql的水平分表与垂直分表的讲解

    垂直分表则是将表的列按照功能或数据大小进行拆分,分成两张或多张表,通常是把经常一起查询的列放在一张表,不常查询或大体积的列放到另一张表。这样做是因为,即使主键上有索引,如果查询时涉及到大字段,即使该...

    MyCat测试报告(单机MySQL与通过MyCat分表后的对比情况)1

    从表结构创建语句来看,每个表(如sbtestX)都包含一个主键id,一个整数k,一个字符字段c和一个填充字段pad。这种结构适用于简单的读写操作,是典型的OLTP测试模型。Sysbench作为一个性能测试工具,使用Perl脚本进行...

    PHP操作mysql数据库分表的方法

    创建分表的SQL语句示例显示了如何创建一系列的`article`表,每个表都有相同的结构,只是在表名后加上了数字标识。每个表都定义了`id`为主键,`subject`和`content`为字段,数据类型分别为VARCHAR和TEXT,使用了...

    JSOUP 一张表存储省市区街道四级地址信息,主键用UUID存储, 还有一种是用四张表分别存取 省 市 区 街道四级 可以作为参

    在IT行业中,数据库设计是至关重要的,特别是在处理地理信息或者多层级数据时。这里提到的两种方法都是为了存储省市区街道四级地址信息,一种是使用单表存储,另一种是使用四张独立的表来分别存储每一级信息。下面将...

    mysql分表程序改动方法

    分表技术主要包括垂直分表和水平分表,这里主要讨论的是水平分表,即将一张大表的数据分散到多张结构相同的表中,以减轻单表的压力。 1. **实现分表的原理**: 水平分表的核心是将数据按照一定的规则分散到多个表...

    1亿条数据如何分表100张到Mysql数据库中(PHP)

    通过一个循环语句,使用SQL的CREATE TABLE语句来动态创建表结构。表中至少包含两个字段,一个是用于存储数据的主键字段`full_code`,另一个是用于记录数据创建时间的`create_time`字段。为了保证数据的读写速度,...

    mysql分区资源整理

    2. **水平分表需要手动创建**:相比之下,水平分表需要显式创建多张表,并通过客户端代理或中间件代理来实现分表逻辑。 总的来说,分区提供了一种更加便捷的方式来管理和优化大型数据集,特别是对于那些不需要复杂...

    使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值

    这种机制对于多表环境下的数据管理非常重要,特别是需要跨表操作或进行联合查询时,能够保证数据的一致性和完整性。同时,`LAST_INSERT_ID()`函数的使用也减少了编程复杂性,简化了处理分表唯一ID的流程。

    mysql分表分库的应用场景和设计方式

    例如,用户购买信息的订单表`order`,可以通过用户ID(`user_id`)进行分表,使用模运算(`user_id%256`)将数据均匀分布到256张表中。这种策略在大多数涉及用户数据的查询中都是有效的,因为通常查询都会包含用户ID...

    全国省市区行政划分数据_省市区MYSQL_

    在MySQL环境下,这样的数据通常会被构建成一张或者多张表,用于存储和查询各级行政区域的数据。 首先,我们需要理解数据库中的表结构。在这个场景下,我们可能有三张主要的表:`province`(省份)、`city`(城市)...

    2019全国统一标准省市区街道4级MySQL脚本数据.rar

    标题中的“2019全国统一标准省市区街道4级MySQL脚本数据...同时,它也展示了如何在MySQL中设计和实施多表关联,以及如何维护一个层次化的数据结构,对于学习数据库设计和SQL编程的初学者来说,也是一个很好的学习案例。

    MySQL 48道面试题及答案.docx

    delete、drop 和 truncate 的区别是,delete 仅删除数据不删除表结构,drop 删除表结构和数据,truncate 删除表结构和数据,并重新创建表结构。 Union 和 UNION ALL 的区别是,Union 对两个结果集进行并集操作,不...

Global site tag (gtag.js) - Google Analytics