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 相关文章推荐
PHP读取MySQL数据代码
Jun 05 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
php设计模式 Singleton(单例模式)
Jun 26 PHP
php设置编码格式的方法
Mar 05 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
学习php开源项目的源码指南
Dec 21 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 PHP
php利用递归实现删除文件目录的方法
Sep 23 PHP
PHP实现微信对账单处理
Oct 01 PHP
php将xml转化对象的实例详解
Nov 17 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根据IP地址获取所在城市具体实现
2013/11/27 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】
2018/12/13 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
浅析Python中的多进程与多线程的使用
2015/04/07 Python
python 实现按对象传值
2019/12/26 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
雅诗兰黛旗下专业男士保养领导品牌:Lab Series
2017/05/15 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
制定岗位职责的原则
2013/11/08 职场文书
行政文员岗位职责
2013/11/08 职场文书
企业员工培训感言
2014/02/26 职场文书
《风筝》教学反思
2014/04/10 职场文书
介绍信的格式
2015/01/30 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python