设为首页 收藏本站
查看: 607|回复: 0

[经验分享] mysql创建多张表结构一样的表(分表时用)

[复制链接]

尚未签到

发表于 2016-10-25 06:14:07 | 显示全部楼层 |阅读模式
一、存储过程创建多张表
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;

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290727-1-1.html 上篇帖子: mysql 数据库 root用户和普通用户 下篇帖子: 基于mysql和ZooKeeper的分布式锁实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表