我是靠谱客的博主 心灵美衬衫,最近开发中收集的这篇文章主要介绍mysql批量创建分表,批量创建分表 - vinci321的个人空间 - OSCHINA - 中文开源技术交流社区...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有两种方法:

1,在mysql中创建存储过程,然后执行

存储过程如下:

USE tobresume;

DROP PROCEDURE IF EXISTS Proc;

DELIMITER $$

CREATE PROCEDURE Proc()

BEGIN

DECLARE db_name VARCHAR(20);

DECLARE table_name VARCHAR(20);

DECLARE table_pro CHAR(18);

DECLARE sql_text VARCHAR(3000);

DECLARE i INT;

DECLARE j VARCHAR(2);

SET db_name='tobresume';

SET table_name='';

SET table_pro ='_talent_dir_resume';

SET sql_text='';

SET i=0;

SET j='';

WHILE i<=128 DO

IF i<10 THEN

SET j=CONCAT('0',i);

ELSE

SET j=LPAD(LCASE(HEX(i)),2,'0');

END IF;

SET table_name=CONCAT(j,table_pro);

SET sql_text=CONCAT('CREATE TABLE IF NOT EXISTS ', db_name,'.',table_name, '(

id int(11) NOT NULL AUTO_INCREMENT,

uid int(11) unsigned NOT NULL DEFAULT 0 COMMENT '用户账号ID',

top_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '集团账号ID',

dir_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '自定义文件夹ID',

parent_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '父账号ID',

resume_id bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '简历ID',

is_deleted tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '是否被删除:1.是 0.否',

created int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',

updated int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',

PRIMARY KEY (id),

UNIQUE KEY unique_uid_dirid_cvid (uid,dir_id,resume_id)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='人才库简历文件夹对应关系表'');

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 ;

call Proc();

结果如下:

| sql_text |

+--------------------------------------------------------------------------------------------------

| CREATE TABLE IF NOT EXISTS tobresume.80_talent_dir_resume(

id int(11) NOT NULL AUTO_INCREMENT,

uid int(11) unsigned NOT NULL DEFAULT 0 COMMENT '用户账号ID',

top_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '集团账号ID',

dir_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '自定义文件夹ID',

parent_id int(11) unsigned NOT NULL DEFAULT 0 COMMENT '父账号ID',

resume_id bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '简历ID',

is_deleted tinyint(1) unsigned NOT NULL DEFAULT 0 COMMENT '是否被删除:1.是 0.否',

created int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',

updated int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',

PRIMARY KEY (id),

UNIQUE KEY unique_uid_dirid_cvid (uid,dir_id,resume_id)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='人才库简历文件夹对应关系表' |

+---------------------------------------------------------------------------------------------------

1 row in set (38.44 sec)

Query OK, 0 rows affected (38.90 sec)

生成129张分表共耗时38.44秒.

第二种方法是shell脚本

#!/bin/bash

MYSQLPATH=`echo 'mysql -h192.168.1.201 -udevuser -pdevuser;'`;

DB_NAME='tobresume';

TABLES_NAME='talent_dir_resume';

for i in `seq 128`;

do

j=`echo 'obase=16;' $i | bc | tr '[A-z]' '[a-z]'`;

x=`echo $j | awk '{print length($0)}'`;

if [ $x -lt 2 ];then

j="0"$j

fi

ALTER_SQL_1="USE $DB_NAME;set names utf8;CREATE TABLE IF NOT EXISTS ${j}_$TABLES_NAME (

id int(11) NOT NULL AUTO_INCREMENT,

uid int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户账号ID',

top_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT '集团账号ID',

dir_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT '自定义文件夹ID',

parent_id int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父账号ID',

resume_id bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '简历ID',

is_deleted tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否被删除:1.是 0.否',

created int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',

updated int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',

PRIMARY KEY (id),

UNIQUE KEY unique_uid_dirid_cvid (uid, dir_id, resume_id)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='人才库简历文件夹对应关系表'"

echo "正在创建${j}_$TABLES_NAME表"

$MYSQLPATH -e "$ALTER_SQL_1"

done

这种方法的缺点就是每次创建都要去连数据库,很有可能被拒绝访问。如下

正在创建80_talent_dir_resume表

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 1045 (28000): Access denied for user 'devuser'@'192.168.1.140' (using password: YES)

参考:

http://zhaoshijie.iteye.com/blog/2280570

https://blog.csdn.net/a__yes/article/details/52795793

最后

以上就是心灵美衬衫为你收集整理的mysql批量创建分表,批量创建分表 - vinci321的个人空间 - OSCHINA - 中文开源技术交流社区...的全部内容,希望文章能够帮你解决mysql批量创建分表,批量创建分表 - vinci321的个人空间 - OSCHINA - 中文开源技术交流社区...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部