PHP自动分表程序
http://blog.zol.com.cn/2210/article_2209590.html
/**
* 分表程序
*
* @author Shen Xi shen.xi@zol.com.cn
* @date 2010-08-19
*/
set_time_limit(0);
$con = mysql_connect("127.0.0.1","root","111111");#创建数据库连接
mysql_select_db ("test",$con);#选择连接数据库“test”
mysql_query("set names gbk");#设置获取数据得字符集
$slctTable = "tb_test";
#获取被分表结构
$sql = "show create table $slctTable";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$createTable = $row['Create Table'];
//echo "$createStr
";
#获取被分表字段名
$field = mysql_list_fields("test",$slctTable,$con);
$filedNum = mysql_num_fields($field);
$fieldStr = "";
for($i=0;$i < $filedNum;$i++){
$fieldStr.= "`". mysql_field_name($field, $i)."`,";
}
if(strlen($fieldStr) == 0){
echo "获取表字段有误!";
exit;
}
$fieldStr = "(".substr($fieldStr,0,-1).")";
//echo "$fieldStr
";
//exit;
#查找最大用户id
$sql = "SELECT max(id) as maxid
FROM $slctTable";
$result =mysql_query($sql);
$row = mysql_fetch_row($result);
$maxid = (int)$row[0];
// var_dump($maxid);
//exit;
if($maxid > 1){
$count = ceil($maxid / 1000);
}else{
echo "用户最大id有误";
exit;
}
$per = 500;#每次取得的记录条数
$prefix = "tb_test";
for($i=0;$i<=$count;$i++){
$table = $prefix.$i;
#生成创建新表的sql语句
$createStr = str_replace("CREATE TABLE `$slctTable`","CREATE TABLE IF NOT EXISTS `$table`",$createTable);
$filehandle = fopen ($table.".sql", "a+");
fwrite($filehandle, $createStr."\r\n");
// mysql_query($createStr);
$sql="SELECT COUNT(*) AS num
FROM $slctTable where CEILING(id / 1000)=$i";
$result =mysql_query($sql);
$row = mysql_fetch_row($result);
$num = (int)$row[0];
$maxNum= ceil((int)$num / $per);
for($j=0;$j<$maxNum;$j++){
$lmt = $j * $per;
if($lmt <= (int)$num){
$sql = "select * from $slctTable where CEILING(id / 1000)=$i order by id limit $lmt,500";
// fwrite($filehandle, $sql."");
$inStr="REPLACE INTO ".$table." ".$fieldStr." VALUES";
// fwrite($filehandle, $inStr."\r\n");
$result = mysql_query($sql);
if($result){
$value="";
while ($row = mysql_fetch_row($result)){
$value.= "(";
for($n=0;$n < $filedNum;$n++){
$value.="'".addslashes($row[$n])."',";
}
if(strlen($value)>2){
$value = substr($value,0,-1)."),\r\n";
}
}
if(strlen($value)>2){
$value = substr($value,0,-3)."";
}
$inStr = $inStr.$value;
// echo $inStr."\r\n";
// mysql_query($inStr);
fwrite($filehandle, $inStr);
}
// fclose($filehandle);
// exit;
}else{
break;
}
}
fclose($filehandle);
}
?>
PHP自动分表程序的更多相关文章
- 支持MySql的数据库自动分表工具DBShardTools发布
支持MySql的数据库自动分表工具DBShardTools发布 前段时间参与了公司的一个项目,这个项目的特点是数据量.访问量都比较大,考虑使用数据库水平分表策略,Google了大半天,竟然没有找到分表 ...
- Mysql Event 自动分表
create table TempComments Like dycomments; 上述 SQL语句创建的新表带有原表的所有属性,主键,索引等. 自动分表怎么做呢? 使用上述语句自动创建分表. 那么 ...
- 使用NLog把日志写入数据库并按天自动分表
前言 最近用Asp.net Core开发程序的时候 因为时间的关系,就没有过多的去关注日志方面的功能 都是直接用系统的ILogger先记录着,然后看日志的时候就先在命令行看日志 在开发阶段没有什么问题 ...
- NPOI 导出excel数据超65535自动分表
工作上遇到的问题,网上找了一些资料 整理了一个比较可行的解决方案. NPOI 大数据量分多个sheet导出 代码段 /// <summary> /// DataTable转换成Excel文 ...
- 基于efcore的分表组件开源
ShardingCore ShardingCore 是一个支持efcore 2.x 3.x 5.x的一个对于数据库分表的一个简易扩展, 目前该库暂未支持分库(未来会支持),仅支持分表,该项目的理念是让 ...
- .NET 5 全自动分表组件,.NET 分表方案 ,分表架构与设计
一.疑问&目的 1.1 分表使用场景 (1)可扩展架构设计,比如一个ERP用5年不卡,到了10就卡了因为数据太多了,这个时候很多人都是备份然后清空数据,这个工作大并且麻烦,以前的数据很难在使用 ...
- NPOI 导出excel 分表
/// <summary> /// 由DataTable导出Excel[超出65536自动分表] /// </summary> /// <param name=" ...
- PostgreSQL 务实应用(三/5)分表复制
问题的提出 在项目中,有些表的记录增长非常快,记录数过大时会使得查询变得困难,导致整个数据库处理性能下降.此时,我们会考虑按一定的规则进行分表存储. 常用的分表方式是按时间周期,如每月一张,每天一张等 ...
- tp5日志分表
/** * 记录网站日志 * * @return bool */ public function record() { // 组装数据 $log = self::$param; $log[self:: ...
随机推荐
- 20150926kaggle Titanic入门篇excel&python
1 excel数据透视表 这里主要是讲述了一下插入里面的数据透视表常用功能,数据透视表十分方便,比直接筛选还要简单,看数据很直观,这里大力推荐. 2 python&pandas 这里主要是讲述 ...
- Linux查找文件夹名
@(编程) find / -type d -name filename type的类型 -type c File is of type c: b block (buffered) special c ...
- poj 3216 Repairing Company(最短路Floyd + 最小路径覆盖 + 构图)
http://poj.org/problem?id=3216 Repairing Company Time Limit: 1000MS Memory Limit: 131072K Total Su ...
- axis2学习, ant 构建axis2 ws
1,axis2安装(windows) . 环境需求:jdk 1.5, tomcat 6, maven 2, ant . 下载(bin表示二进制文件):http://mirror.bjtu.edu. ...
- POJ 2828Buy Tickets
POJ 2828 题目大意是说有n个插入操作,每次把B插入到位置A,原来A以后的全部往后移动1,球最后的序列 tree里保存的应该是这整个区间还有多扫个位置可以插入数据,那么线段树里从后往前扫描依次插 ...
- HDU1151Air Raid(二分图的最大匹配)
题目大意: 有一个城镇,它的所有街道都是单行的,并且每条街道都是和两个路口相连.同时已知街道不会形成回路. 你的任务是编写程序求最小数量的伞兵,这些伞兵可以访问(visit)所有的路口.
- 图说Java —— 理解Java机制最受欢迎的8幅图
原文链接: Top 8 Diagrams for Understanding Java 翻译人员: 铁锚 翻译时间: 2013年10月29日 世间总是一图胜过千万言! 下面的8幅图来自于 Progr ...
- 监听UITextFiled输入文字长度的变化
需求:如果UITextFiled文字的长度大于零,改变一个按钮的颜色 1.一开始想到的当然是UITextFiled的代理方法,但是在UITextFiled的代理方法中并没有监听这个的这一选项!!! 2 ...
- 如何设置box shadow的透明度
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-04-24) 今天发现使用box-shadow属性,可以很好的给div添加阴影效果,但是添加的效果如果是: -moz-box- ...
- WPF中的数据模板(DataTemplate)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/30/694388.html WPF中的数据模板(DataTemplate) ...