PHP框架Laravel中使用UUID实现数据分表操作示例


Posted in PHP onMay 30, 2018

本文实例讲述了PHP框架Laravel中使用UUID实现数据分表操作。分享给大家供大家参考,具体如下:

UUID

UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。

说的简单点,它就是通过一个规则(如:业务标识号+年月日+当日自增数字格式化)生成的一个具有唯一性的辨识资讯。用于关联我们的一些额数据和资讯。

实例

之前在做一个项目的时候用到这个东西,现在我就用Laravel框架写一个简单的demo

前端form表单

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="/addMysql" method="post">
      {!!csrf_field()!!}
      <table>
        <tr>
          <th style="colspan:2">注册</th>
        </tr>
        <tr>
          <td>账号</td>
          <td>
            <input type="text" name="uname" value="" />
          </td>
        </tr>
        <tr>
          <td>密码</td>
          <td>
            <input type="password" name="pwd" value="" />
          </td>
        </tr>
        <tr>
          <td>性别</td>
          <td>
            <input type="radio" name="sex" value="1" />:男
            <input type="radio" name="sex" value="0" />:女
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="age" value="" />
          </td>
        </tr>
        <tr>
          <td style="colspan:2">
            <input type="submit" value="提交" />
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

建立数据库和数据表(只建立 1 个索引表 和 8 个进行存储详细信息的子表)

原理:通过UUID的唯一特性,将一个数据的详细信息数据存在其他表中的,这个表示通过UUID随机分配出来的,索引表中只存储UUID和关键字段

表前缀统一前缀-------mall_
表 :    mall_index_user       索引表    -------uuid,uname
表0:    mall_user_0           uuid,uname,sex,age
表1:    mall_user_1
表2:    mall_user_2
表3:    mall_user_3
表4:    mall_user_4
表5:    mall_user_5
表6:    mall_user_6
表7:    mall_user_7

通过路由和控制器进行form表单提交数据向数据库插入数据

路由:

//form表单页面路由
Route::get('Mysql',function(){
  return view('home/Mysql');
});
//数据插入提交路由
Route::post('/addMysql','findMoreController@addMysql');

控制器:

//向数据库插入数据
public function addMysql(Request $request){
  $uuid =md5(uniqid(mt_rand (), true));
  $uid =hexdec(substr($uuid,0,1)) % 8;
  $sex = $request->input('sex');
  $age = $request->input('age');
  //dd($uuid);
  $uname = $request->input('uname');
  $result = DB::table('index_user')->insert(['uuid'=>$uuid,'uname'=>$uname]);
  $result1 = DB::table('user_'.$uid)->insert(['uuid'=>$uuid,'uname'=>$uname,'sex'=>$sex,'age'=>$age]);
  if($result1){
    return '1';
  }else{
    return '0';
  }
}

解:上面的$uid就是通过UUID得到的要向哪一张详细信息表中插入的表的代表号

例如:$uid=3     那么就向user_3中插入详细信息

插入成功后进行查询,先通过uname查询出UUID,通过UUID知道详细信息存储在哪张子表中.然后再进行查询

路由:

//查询页面
Route::get('findMysql',function(){
  return view('home/findMysql');
});
//查询路由
Route::post('/findMysql','findMoreController@findMysql');

控制器:

//查询
public function findMysql(Request $request){
    //dd($request);
    $uname=$request->input('uname');
    $uuid =DB::table('index_user')->where('uname','=',$uname)->value('uuid');
    $uid =hexdec(substr($uuid,0,1)) % 8;
    $userInfos=DB::table('user_'.$uid)->get();
    if($userInfos){
      return view('home/selectMysql',['userInfos'=>$userInfos]);
    }else{
      return view('home/findMysql');
    }
}

前端展示

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <form action="" method="post">
      <table>
        <tr>
          <th style="colspan:2">遍历</th>
        </tr>
        @foreach($userInfos as $userInfo)
        <tr>
          <td>性别</td>
          <td>
            <input type="text" name="" value="{{$userInfo->sex}}" />
          </td>
        </tr>
        <tr>
          <td>年龄</td>
          <td>
            <input type="text" name="" value="{{$userInfo->age}}" />
          </td>
        </tr>
        @endforeach
      </table>
    </form>
  </body>
</html>

至此,一个简单的利用UUID分表处理数据的例子就完成了。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
php自动获取目录下的模板的代码
Aug 08 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
PHP封装的HttpClient类用法实例
Jun 17 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
PHP implode()函数用法讲解
Mar 08 PHP
Laravel框架自定义分页样式操作示例
Jan 26 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 PHP
php优化查询foreach代码实例讲解
Mar 24 PHP
php微信小程序解包过程实例详解
Mar 31 PHP
php支付宝系列之电脑网站支付
May 30 #PHP
Laravel框架使用Redis的方法详解
May 30 #PHP
php实现微信支付之退款功能
May 30 #PHP
分享5个非常有用的Laravel Blade指令
May 30 #PHP
php实现微信支付之企业付款
May 30 #PHP
ThinkPHP5框架缓存查询操作分析
May 30 #PHP
PHP实现通过CURL上传文件功能示例
May 30 #PHP
You might like
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
Vue入门之animate过渡动画效果
2018/04/08 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
微信小程序实现手指触摸画板
2018/07/09 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
学习python的几条建议分享
2013/02/10 Python
python集合是否可变总结
2019/06/20 Python
python交易记录整合交易类详解
2019/07/03 Python
python getpass实现密文实例详解
2019/09/24 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
Python 没有main函数的原因
2020/07/10 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
建筑人员岗位职责
2013/12/25 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
Nginx如何配置根据路径转发详解
2022/07/23 Servers